【发布时间】:2015-11-16 18:59:48
【问题描述】:
我已经为这个问题苦苦挣扎了一段时间。我查看了谷歌的每一个角落,但没有成功。问题是在 jQuery 调用 ASP.NET WebApi 控制器中的 GET 方法时,它返回 405 不允许。 我在 stackowerflow 和其他一些页面上发现人们正在谈论 WebDAV 问题和 CORS,并且我尝试了很多可能的解决方案,但对我没有任何效果。
另外我必须告诉我,我对我的 POST 方法的调用做得很好。本项目是localhost开发的,不在线。
现在我在墙前感到困惑,我需要你的帮助,我将不胜感激。为什么是 405,为什么?
我使用的简化代码如下:
WebApiConfig
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
ApiController:
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class UserInfoController : ApiController
{
[HttpGet]
public async Task<UserModel> Get(string Facebook_ID)
{
UserModel user = new UserModel();
//some database await work
return user;
}
jQuery(对 GET 方法的 ajax 调用):
$.ajax({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
url: 'api/UserInfo/' + data.Facebook_ID,
type: 'GET',
contentType: 'application/json;',
//data: JSON.stringify(data.Facebook_ID),
success: function (valid) {
if (valid) {
console.log("GET HURAAAAY!!!" + JSON.stringify(valid));
} else {
console.log("GET DAMN" + valid);
}
}
});
Web.config(部分):
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<remove name="WebDAV" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
【问题讨论】:
标签: jquery asp.net asp.net-web-api get