您好我需要有两个独立的项目,一个是MVC项目,另一个是WEB API项目。两个项目将放在不同的解决方案中。
当我尝试从mvc项目向web api项目进行ajax调用时出现问题,我发现了这个错误:
OPTIONS http://localhost:54599/api/Account/IsCurrentUserAuthenticated 405
(方法不允许)jquery-1.9.1.min.js:5个选项
http://localhost:54599/api/Account/IsCurrentUserAuthenticated
起源 Access-Control-Allow-Origin不允许http://localhost:61620
。 jquery-1.9.1.min.js:5 XMLHttpRequest无法加载http://localhost:54599/api/Account/IsCurrentUserAuthenticated
。起源 Access-Control-Allow-Origin不允许http://localhost:61620
。
经过一番研究后,我想出了这个过滤器,它被添加到控制器中,我需要拨打电话:
public class AllowCrossSiteJsonWebApiAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext filterContext)
{
filterContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
string rqstMethod = filterContext.ActionContext.ControllerContext.Request.Method.Method.ToUpperInvariant();
if (rqstMethod == "OPTIONS" || rqstMethod == "POST")
{
filterContext.Response.Headers.Add("Access-Control-Allow-Methods", "POST, OPTIONS");
filterContext.Response.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With, Accept, Access-Control-Allow-Origin, Content-Type");
}
if (rqstMethod == "OPTIONS")
{
filterContext.Response = new HttpResponseMessage(HttpStatusCode.OK);
return;
}
base.OnActionExecuted(filterContext);
}
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext filterContext)
{
base.OnActionExecuting(filterContext);
}
}
这是我从客户那里打来的电话:
function fetch(url) {
xhrFields = {
withCredentials: true // pass auth cookies to server over ajax req
};
var options = {
url: url,
type: 'GET',
contentType: "application/json; charset=utf-16",
dataType: 'json',
xhrFields: xhrFields
};
return $.ajax(options);
}
如何解决我的问题?
答案 0 :(得分:2)
var options = {
url: url,
type: 'GET',
contentType: "application/json; charset=utf-16",
dataType: 'jsonp',
xhrFields: xhrFields
};
使用跨域时,您需要使用jsonp
数据类型。
答案 1 :(得分:1)
您需要使用dataType: 'jsonp'
进行跨域请求