休息 API - 不允许使用 405 方法
Rest API - 405 method not allowed
我是 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("Success");
alert(data);
},
error: function (xhr, textStatus, errorThrown) {
alert("Failed");
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 cannot load http://xx.xxx.xxx.xx:9003/GetProjectList?StartDate=2016-12-20&EndDate=2017-01-10. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:64207' is therefore not allowed access. The response had HTTP status code 405.
我在这里遗漏了什么吗?任何代码或配置?
如果我直接从浏览器或 Postman 中点击 URL,它工作正常。但它在应用程序中不起作用。
我认为问题是 CORS 问题(有时 405 也意味着你用错误的 HTTP 动词调用你的 API)..但是阅读你的异常它看起来像一个 CORS 问题..试试这个:
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 包
问题与 CORS(Cross-Origin 请求)有关。您必须启用 CORS 才能解决问题。
使用 Nuget 包下载
Install-Package Microsoft.AspNet.WebApi.Cors
您应该在 WebApiConfig.cs
中添加一些代码
var corsAttr = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(corsAttr);
您应该查看的更多信息:
https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
我是 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("Success");
alert(data);
},
error: function (xhr, textStatus, errorThrown) {
alert("Failed");
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 cannot load http://xx.xxx.xxx.xx:9003/GetProjectList?StartDate=2016-12-20&EndDate=2017-01-10. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:64207' is therefore not allowed access. The response had HTTP status code 405.
我在这里遗漏了什么吗?任何代码或配置?
如果我直接从浏览器或 Postman 中点击 URL,它工作正常。但它在应用程序中不起作用。
我认为问题是 CORS 问题(有时 405 也意味着你用错误的 HTTP 动词调用你的 API)..但是阅读你的异常它看起来像一个 CORS 问题..试试这个:
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 包
问题与 CORS(Cross-Origin 请求)有关。您必须启用 CORS 才能解决问题。
使用 Nuget 包下载
Install-Package Microsoft.AspNet.WebApi.Cors
您应该在 WebApiConfig.cs
中添加一些代码var corsAttr = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(corsAttr);
您应该查看的更多信息: https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api