【发布时间】:2015-03-16 19:30:57
【问题描述】:
我正在为我的 API 设置一个 WebAPI 端点,但是我无法让我的 AngularJS 调用对我的 PostRegister 方法起作用。
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>
在 Angular 方面,我做了一个简单的 $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
【问题讨论】:
-
你能在你的控制器中发布相关的路由代码吗?
-
顺便说一句,您的代码看起来与您链接的文章根本不一样,您的
PostRegister()函数的签名与网站上代码中的任何函数完全不同,并且不似乎也与 angular.js$http.post方法的签名相匹配。 -
其他方法有用吗?如果在 PostRegister() 上方设置 [HttpPost] 属性是否有帮助? (以防你的路线搞砸了......)
-
@AndrewCounts,我已经开始了我的项目,但无法让它工作,所以我开始对其进行调整,使其类似于我链接到的文章。
-
我怀疑您是否在邮递员响应中获得了访问控制标头。要在邮递员响应中获取这些属性,您需要添加源属性。我也没有看到为 webapi 启用了 CORS
标签: angularjs asp.net-web-api cors asp.net-web-api2 owin