【发布时间】:2015-08-01 04:31:09
【问题描述】:
所以我真的在这个问题上苦苦挣扎,并搜索了互联网并尝试了我能找到的所有可能的建议。
我有一个 web api c# 项目和一个 JS web 项目。在本地运行时,一切正常。当我发布到 Azure 时,我可以通过 REST 控制台访问我的 api 方法,一切正常。问题是当我的 Web 应用程序尝试对每个方法(初始令牌调用除外)进行相同的调用时,都会返回 405。
我已经多次使用 CORS 设置和 web.config,我不确定是否需要什么...这变得非常混乱,但我会尝试在此处粘贴相关位。
我的 web.config system.webServer 设置
<modules>
<remove name="FormsAuthentication" />
<remove name="WebDAVModule"/>
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
<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>
WebApiConfig.cs 注册方法
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
还有一个示例 api 控制器
[Authorize]
[Route("getall")]
[HttpGet]
public IHttpActionResult GetAll()
{
return Ok(PersonRepository.Get());
}
还有 JS $http.get($rootScope.serviceBase + 'api/person/getall')
所以总结一下这里的情况:
- 在本地运行时,调用工作正常
- 发布到 Azure 后,我可以直接调用其余端点
- 发布到 Azure 时,我的 JS 返回 405 非描述性错误
- 如果我从 web.config 中删除 CORS 标头并在我的 Register 方法中使用 enableCors,我什至无法点击 /token,而是到处都收到 CORS 预检错误(尽管我仍然可以成功地从休息控制台进行调用)这非常令人困惑
更新
我会记录我在这里尝试的东西的运行日志:
- 在 webConfig 中的 customHeaders 中添加了
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />,没有变化
【问题讨论】:
标签: c# api rest azure asp.net-web-api