我正在为我的应用程序接口设置一个WebAPI端点,但是我无法让我的PostRegister方法的AngularJS调用正常工作。
webAPI和Angular位于不同的站点。
在Startup.cs上,我有:
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);
}
然后在控制器上,我将我的方法设置为允许匿名:
[AllowAnonymous]
public bool PostRegister(UserSignupForm form)
{
...
}
我还更新了web.config:
<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调用:
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
发布于 2015-01-22 19:39:20
最近我也遇到了类似的问题。我为飞行前的OPTIONS
请求添加了控制器处理程序,它解决了这个问题。
[AllowAnonymous]
[Route("Register")]
[AcceptVerbs("OPTIONS")]
public async Task<IHttpActionResult> Register()
{
return Ok();
}
发布于 2015-01-24 06:18:23
您可能需要在应用程序中允许cors作为响应头。下面是我在node中所做的示例。
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');
这可能对你有帮助。谢谢。
发布于 2015-01-19 08:25:39
这听起来像是一个跨来源的问题。您应该安装Fiddler并检查405响应是否是由浏览器在不同来源上调用资源时发出的飞行前请求(OPTIONS动词)引起的。
有关CORS的详细解释,请参阅本文:http://www.html5rocks.com/en/tutorials/cors/
https://stackoverflow.com/questions/28013696
复制相似问题