Rest API - 405方法不允许
Rest API - 405方法不允许
我对Rest API还不太熟悉。我尝试从我的应用程序调用跨域的Rest API。
以下是我的代码 -
$.ajax({ type: "GET", async: false, url: 'http://xx.xxx.xxx.xx:9003/GetProjectList', contentType: "application/json", dataType: "json", traditional: true, CrossDomain: true, data: { StartDate: '2016-12-20', EndDate: '2017-01-10' }, success: function (data) { alert("成功"); alert(data); }, error: function (xhr, textStatus, errorThrown) { alert("失败"); alert(xhr); alert(textStatus); alert(errorThrown); } });
但是我得到的错误是:
OPTIONS http://xx.xxx.xxx.xx:9003/GetProjectList?StartDate=2016-12-20&EndDate=2017-01-10 405 (Method Not Allowed) XMLHttpRequest无法加载http://xx.xxx.xxx.xx:9003/GetProjectList?StartDate=2016-12-20&EndDate=2017-01-10。对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'头。因此,不允许访问来自'http://localhost:64207'的资源。响应的HTTP状态代码为405。
我有什么遗漏吗?有任何代码或配置吗?
如果我直接从浏览器或Postman访问该URL,它可以正常工作。但是它从应用程序中无法工作。
问题出现的原因是CORS(跨域请求)。为了解决这个问题,你需要启用CORS。可以通过以下步骤来完成:
1. 下载Nuget Package:Install-Package Microsoft.AspNet.WebApi.Cors
2. 在WebApiConfig.cs文件中添加以下代码:
var corsAttr = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(corsAttr);
3. 更多信息请参考:https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
问题出现的原因是CORS问题,有时405也意味着使用了错误的HTTP动词调用API。根据异常信息来看,这看起来是一个CORS问题。解决方法是在启动文件中添加以下代码,并安装Microsoft.Owin.Cors NuGet包。
using Goocity.API; using Microsoft.Owin; using Microsoft.Owin.Cors; using Owin; [assembly: OwinStartup("API", typeof(Goocity.API.Startup))] namespace Goocity.API { public partial class Startup { public void Configuration(IAppBuilder app) { #region TO UNCOMMENT WHEN IS IN PRODUCTION //var corsPolicy = new CorsPolicy //{ // AllowAnyMethod = true, // AllowAnyHeader = true, // SupportsCredentials = true, // Origins = { "http://www.yoursite.it" } //}; //app.UseCors(new CorsOptions //{ // PolicyProvider = new CorsPolicyProvider // { // PolicyResolver = context => Task.FromResult(corsPolicy) // } //}); #endregion TO UNCOMMENT WHEN IS IN PRODUCTION app.UseCors(CorsOptions.AllowAll); ConfigureAuth(app); } } }
尝试将此代码放在您的启动文件中,并安装Microsoft.Owin.Cors NuGet包。