Jquery 不允许ASP.NET WebApi获取方法405
我已经为这个问题挣扎了一段时间。我浏览了谷歌的每一个角落,但都没有成功。问题在于,在ASP.NET WebApi控制器中调用GET方法的jQuery时,它返回405 not allowed。 我在stackowerflow和其他一些页面上发现,人们正在谈论WebDAV问题和CORS,我尝试了很多可能的解决方案,但没有任何效果 我还必须告诉大家,我对POST方法的调用做得很好。这个项目是由localhost开发的,它不是在线的 现在我困惑地站在墙前,我需要你的帮助,我会感激你的帮助。为什么405,为什么 我使用的简化代码如下所示: WebApiConfigJquery 不允许ASP.NET WebApi获取方法405,jquery,asp.net,asp.net-web-api,get,Jquery,Asp.net,Asp.net Web Api,Get,我已经为这个问题挣扎了一段时间。我浏览了谷歌的每一个角落,但都没有成功。问题在于,在ASP.NET WebApi控制器中调用GET方法的jQuery时,它返回405 not allowed。 我在stackowerflow和其他一些页面上发现,人们正在谈论WebDAV问题和CORS,我尝试了很多可能的解决方案,但没有任何效果 我还必须告诉大家,我对POST方法的调用做得很好。这个项目是由localhost开发的,它不是在线的 现在我困惑地站在墙前,我需要你的帮助,我会感激你的帮助。为什么405,
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;
}
$.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);
}
}
});
<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>
Web.config(它的一部分):
[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;
}
$.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);
}
}
});
<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>
我认为您应该使用[AllowAnonymous]属性为GET方法添加注释,当然,Post方法不能接收相同的属性。 我使用本页作为指南:
我认为您应该使用[AllowAnonymous]属性为GET方法添加注释,当然,Post方法不能接收相同的属性。 我使用本页作为指南:
控制器还有其他方法吗?试用
[HttpGet]
[Route("api/UserInfo/{Facebook_ID}")
[ResponseType(typeof(UserModel))]
public async Task<UserModel> Get(string Facebook_ID)
{
UserModel user = new UserModel();
//some database await work
return user;
}
[HttpGet]
[路由(“api/UserInfo/{Facebook_ID}”)
[响应类型(typeof(UserModel))]
公共异步任务Get(字符串Facebook\u ID)
{
UserModel user=new UserModel();
//一些数据库正在等待工作
返回用户;
}
为什么会出现此错误(http 405)?,这与路由中的联盟有关,可能其他方法具有相同的符号,请检查此属性路由:控制器具有其他方法?尝试使用
[HttpGet]
[Route("api/UserInfo/{Facebook_ID}")
[ResponseType(typeof(UserModel))]
public async Task<UserModel> Get(string Facebook_ID)
{
UserModel user = new UserModel();
//some database await work
return user;
}
[HttpGet]
[路由(“api/UserInfo/{Facebook_ID}”)
[响应类型(typeof(UserModel))]
公共异步任务Get(字符串Facebook\u ID)
{
UserModel user=new UserModel();
//一些数据库正在等待工作
返回用户;
}
为什么会出现此错误(http 405)?,这是关于路由中的联盟,可能其他方法也有相同的符号,请检查属性路由:这是关于路由中的联盟,AllowAnonymous用于允许在没有身份验证的情况下访问路由。注意!这是关于路由中的联盟,AllowAnonymous用于允许在没有身份验证的情况下访问路由伊恩,你好!