【问题标题】:ASP.NET WebApi Get method 405 not allowedASP.NET WebApi Get 方法 405 不允许
【发布时间】: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


    【解决方案1】:

    控制器还有其他方法吗?尝试使用

    [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;
    }
    

    为什么会出现这个错误(http 405)?,它是关于你的路由中的联盟,也许其他方法有相同的标志,检查这个属性路由:Attribute Routing in ASP.NET Web API 2

    【讨论】:

      【解决方案2】:

      我认为你应该用 [AllowAnonymous] 属性注释你的 GET 方法,当然,一个 Post 方法不能接收相同的属性。 我使用这个页面作为指南: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api

      【讨论】:

      • 是关于路由中的联合,AllowAnonymous 是用来允许在没有认证的情况下访问路由。问候!
      猜你喜欢
      • 2016-05-06
      • 2019-09-22
      • 2016-12-03
      • 1970-01-01
      • 2019-07-28
      • 2014-05-21
      • 1970-01-01
      • 2017-11-13
      • 2016-01-31
      相关资源
      最近更新 更多