【发布时间】:2017-12-20 05:13:17
【问题描述】:
我正在开发一个 C# MVC Web 应用程序,它将跨域请求发送到 Web API REST 服务。但是我不断收到错误。我的jquery代码如下:
$.ajax({
url: RESTurl,
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'myCallback'
});
window.myCallback = function (data) {
console.log(data);
};
处理我的请求的 webAPI 代码是这样的:
[HttpPost, HttpGet]
public String checkStatus(string passedId)
{
//some other code
return "Status Unavailable";
}
我的 webApiConfig 文件如下:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{passedId}",
defaults: new { passedId = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html"));
我的问题是,当我在浏览器地址栏中键入请求时,我得到了正确的响应-Status Unavailable。 (我也使用邮递员得到正确的响应,但我相信这是因为 CORS 不适用于邮递员)
我尝试添加crossDomain: 'true' 并将jquery 跨域插件添加到项目中,但没有帮助。
我也试过不带回调函数但没有得到结果。
还尝试将Microsoft.AspNet.WebApi.Cors添加到webApi项目然后添加
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
到 webApiConfig.cs(如建议的here),但它也没有任何区别。如果 CORS 存在问题,我很惊讶直接从浏览器键入时会有响应。 我现在的反应是这样的:
http://xxxxx.com:xxxx/xerviceapi/api/xxx/checkstatus/3?callback=myCallback&_=1500087168776
如您所见,我的 jquery 版本是 1.10(有点旧),但我目前无法升级,因为其他模块依赖于它。这是一个原因吗?
即使我从浏览器收到响应,我是否还需要向 webAPI 添加响应正文?如果是这样怎么办?请帮忙。
【问题讨论】:
-
你试过了吗:stackoverflow.com/questions/9421312/jsonp-with-asp-net-web-api?请注意 jsonp 和 cors 是两个不同的概念:stackoverflow.com/questions/12296910/so-jsonp-or-cors
标签: javascript c# jquery asp.net-mvc-4 asp.net-web-api