Rest API - 405方法不允许

7 浏览
0 Comments

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,它可以正常工作。但是它从应用程序中无法工作。

0
0 Comments

问题出现的原因是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

0
0 Comments

问题出现的原因是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包。

0