相关疑难解决方法(0)

如何在ASP.NET Core中启用CORS

我试图在我的ASP.NET Core Web API上启用跨源资源共享,但我被困住了.

EnableCors属性接受policyName类型string为参数:

// Summary:
//     Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute.
//
// Parameters:
//   policyName:
//     The name of the policy to be applied.
public EnableCorsAttribute(string policyName);
Run Code Online (Sandbox Code Playgroud)

policyName意味着什么以及如何在ASP.NET Core Web API上配置CORS

c# asp.net-core

154
推荐指数
10
解决办法
11万
查看次数

TypeScript中的JQuery POST请求

我正在尝试使用TypeScript和JQuery(来自Definitely Typed)与API进行交谈.

let ajaxsettings: JQueryAjaxSettings = {
    url: this.url,
    contentType: "application/json",
    type: "POST",
    data: JSON.stringify(this.apiRequest),
    processData: false,
    success: ( data, textStatus, jQxhr ) => {
        console.log("Response:" + JSON.stringify(data));
    },
    error: ( jqXhr, textStatus, errorThrown ) => {
        console.log("Error Response; " + JSON.stringify(jqXhr));
    },
    headers: {
        "X-UserName": "blahblah",
        "X-Password": "blahblah"
    },
    beforeSend: (request) => {
        request.setRequestHeader("X-APIKey", "blahblahblah");
    }
};
$.ajax(ajaxsettings);
Run Code Online (Sandbox Code Playgroud)

提出请求并查看Fiddler捕获的内容是相当奇怪的.

Fiddler JQuery请求

错误的HTTP谓词和标头包含在Access-Control-Request-Headers中,而不是标准标头.

JQuery 3.2.0,以及来自Definitely Typed的最新index.d.ts .

我可以在Fiddler中创建一个HTTP请求:

提琴手请求

我正在尝试创建的请求:

提琴手输出

更新

我已经尝试过使用dataType来解决预检检查:

contentType : "text/plain",
method: "POST",
type: "post", …
Run Code Online (Sandbox Code Playgroud)

jquery typescript typescript2.3

8
推荐指数
1
解决办法
2254
查看次数

EnableCors 属性未向 API 响应添加 Access-Control-Allow-Origin

问题:

出于某种原因,启用 CORS 时,Access-Control-Allow-Origin响应中不包含标头。

错误:

从源“https://some.site.com”访问“https://.../api/endpoints/some-path”的 XMLHttpRequest 已被 CORS 政策阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

配置 (.NET MVC 5)

web.config标头:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Credentials" value="true"/>
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, OPTIONS" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

Web API 配置:

config.EnableCors();
Run Code Online (Sandbox Code Playgroud)

API 端点:

[RoutePrefix("api/endpoints")]
[EnableCors(origins: "https://some.site.com", headers: "*", methods: "*")]
public class MyApiController : ApiController
{
    [HttpPost]
    [Route("some-path")]
    [EnableCors(origins: "https://some.site.com", headers: "*", methods: "*")]
    public ResponseModel GetSomeResponse(DataModel model) { ... }
}
Run Code Online (Sandbox Code Playgroud)

global.asax.cs

protected void Application_BeginRequest(object sender, EventArgs e) …
Run Code Online (Sandbox Code Playgroud)

c# api asp.net-mvc

7
推荐指数
1
解决办法
2670
查看次数

Asp.NET MVC Core CORS

我们正在开发具有移动部件和Web UI的应用程序.Web UI使用angular,我们在后端配置cors时遇到问题.我们的代码看起来像这样(只是对我们的问题很重要的代码):

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors("AllowAll");

    app.UseMvc();
}

public void ConfigureServices(IServiceCollection services)
{            
    services.AddMvc();

    //Add Cors support to the service
    services.AddCors(
        options => options.AddPolicy(
            "AllowAll", p => p.AllowAnyOrigin()
                .AllowAnyHeader()
                .AllowAnyMethod()
                .AllowCredentials()
            )
        );
}
Run Code Online (Sandbox Code Playgroud)

从stackoverflow上的文档和其他帖子,这应该工作,但不是.我们错过了什么?

日Thnx


编辑:

这是POSTMAN的请求:

卷曲' https://guw.azurewebsites.net/api/token ' -X选项-H '杂注:无缓存' -H '访问控制请求-方法:POST' -H"来源: HTTP:// localhost:9000' -H'Eccept-Encoding:gzip,deflate,sdch,br'-H'Accept-Language:en-US,en; q = 0.8'-H'User-Agent:Mozilla/5.0(Windows NT 10.0 ; WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/51.0.2704.103 Safari/537.36'-H'接受:/ ' - H'缓存控制:无缓存'-H'参考:http:// localhost: 9000 / '-H'连接:keep-alive'-H'Access-Control-Request-Headers:接受,授权,内容类型' - 压缩

你可以在邮递员中导入它并查看它.此请求由angular app发送.

希望这可以帮助.

最后我决定在我的中间件中添加这个方法:

private …
Run Code Online (Sandbox Code Playgroud)

cors asp.net-core-mvc asp.net-core

6
推荐指数
1
解决办法
2752
查看次数

无法在 ASP.Net Core web api 中启用 CORS

我创建了一个带有单个控制器的 ASP.Net CORE Web API 项目,现在想从客户端 (React) Web 应用程序调用它。

但是,调用失败,并显示“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”。

从 Fiddler 调用同一个端点时,预期的响应标头不存在。

感谢 ATerry,我有了更深入的了解:标头不存在,因为 React Web 应用程序和 .Net Core Web API 托管在同一个盒子上。React 填充与 (API) 框相同的请求 Origin: 标头,因此服务器(非常聪明)不会添加 Allow-... 响应标头。然而,React 应用程序拒绝响应,因为缺少这些标头。

我正在使用 .Net Core v2.1(在撰写本文时最新)。

我构建的代码基于

https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.1

我检查了这些

https://weblog.west-wind.com/posts/2016/Sep/26/ASPNET-Core-and-CORS-Gotchas

.NET Core 中的 CORS

如何在 ASP.NET Core 中启用 CORS

...但没有一个建议奏效。

有任何想法吗?

这就是我配置 .Net Core 应用程序的方式(代码从实际更改为尝试并允许任何操作):

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. …
Run Code Online (Sandbox Code Playgroud)

asp.net cors reactjs .net-core

3
推荐指数
1
解决办法
1万
查看次数