首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WebAPI2 (OWIN)上不允许使用405方法

WebAPI2 (OWIN)上不允许使用405方法
EN

Stack Overflow用户
提问于 2015-01-19 03:13:03
回答 3查看 14.4K关注 0票数 17

我正在为我的应用程序接口设置一个WebAPI端点,但是我无法让我的PostRegister方法的AngularJS调用正常工作。

webAPI和Angular位于不同的站点。

在Startup.cs上,我有:

代码语言:javascript
复制
    public void Configuration(IAppBuilder app)
    {
        ConfigureOAuth(app);

        var config = new HttpConfiguration();

        WebApiConfig.Register(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        app.UseWebApi(config);

    }

    private void ConfigureOAuth(IAppBuilder app)
    {
        var oAuthServerOptions = new OAuthAuthorizationServerOptions
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString(Paths.TokenPath),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
            Provider = Kernel.Get<IOAuthAuthorizationServerProvider>()
        };
        app.UseOAuthAuthorizationServer(oAuthServerOptions); 

        OAuthBearerOptions = new OAuthBearerAuthenticationOptions();
        app.UseOAuthBearerAuthentication(OAuthBearerOptions);
    }

然后在控制器上,我将我的方法设置为允许匿名:

代码语言:javascript
复制
    [AllowAnonymous]
    public bool PostRegister(UserSignupForm form)
    {
        ...
    }

我还更新了web.config:

代码语言:javascript
复制
 <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

在角度方面,我进行了一个简单的$http.post调用:

代码语言:javascript
复制
    saveRegistration: function (registration) {
        return $http.post(baseUrl + '/api/signup/register', registration).then(function (response) {
            return response;
        });
    }

当使用Postman进行调用时,我得到了一个成功的响应,但当从Angular进行相同的调用时,我得到了405错误。

BitOfTech示例站点正在发送相同的请求头,但能够获取Access-Control-Allow-XXX头

我已经更新了我的代码以遵循Token Based Authentication using ASP.NET Web API 2, Owin, and Identity

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-22 19:39:20

最近我也遇到了类似的问题。我为飞行前的OPTIONS请求添加了控制器处理程序,它解决了这个问题。

代码语言:javascript
复制
[AllowAnonymous]
[Route("Register")]
[AcceptVerbs("OPTIONS")]
public async Task<IHttpActionResult> Register()
{
    return Ok();
}
票数 10
EN

Stack Overflow用户

发布于 2015-01-24 06:18:23

您可能需要在应用程序中允许cors作为响应头。下面是我在node中所做的示例。

代码语言:javascript
复制
res.header('Access-Control-Allow-Origin', '*');

res.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS"); 

res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');

这可能对你有帮助。谢谢。

票数 3
EN

Stack Overflow用户

发布于 2015-01-19 08:25:39

这听起来像是一个跨来源的问题。您应该安装Fiddler并检查405响应是否是由浏览器在不同来源上调用资源时发出的飞行前请求(OPTIONS动词)引起的。

有关CORS的详细解释,请参阅本文:http://www.html5rocks.com/en/tutorials/cors/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28013696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档