Jquery 不允许ASP.NET WebApi获取方法405

Jquery 不允许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,

我已经为这个问题挣扎了一段时间。我浏览了谷歌的每一个角落,但都没有成功。问题在于,在ASP.NET WebApi控制器中调用GET方法的jQuery时,它返回405 not allowed。 我在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;
    }
   $.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用于允许在没有身份验证的情况下访问路由伊恩,你好!