MVC6 Cors

编程入门 行业动态 更新时间:2024-10-26 14:40:10
本文介绍了MVC6 Cors - 拦截预检的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我将我的WebApi升级到MVC6。

在WebApi我可以拦截每个HTTP请求,如果它是一个预检我可以响应头浏览器会接受。

我想弄清楚如何做同样的事情在MVC6 WebApi。

这是WebApi代码。

protected void Application_BeginRequest(object sender,EventArgs e) { if(Context.Request.Path.Contains(api /)&& amp;& amp;& amp;&& Allow-Origin,Context.Request.Headers [Origin]); Context.Response.AddHeader(Access-Control-Allow-Headers,Origin,X-Requested-With,Content-Type,Accept); Context.Response.AddHeader(Access-Control-Allow-Methods,GET,POST,PUT,DELETE,OPTIONS); Context.Response.AddHeader(Access-Control-Allow-Credentials,true); Context.Response.End(); } }

如何用MVC6做同样的事情? / p>

感谢, Bob

这是我根据反馈进行的下一次尝试。如果我理解中间件管道,我可能自己想出来。

我试过这个代码,但它并没有像我所希望的http请求。

public void配置(IApplicationBuilder应用程序,IHostingEnvironment env) { //配置HTTP请求管道。 app.UseStaticFiles(); //将MVC添加到请求管道。 app.UseMvc(); //为移植Web API 2控制器添加以下路由。 // routes.MapWebApiRoute(DefaultApi,api / {controller} / {id?}); //自定义中间件在每个调用进入时检查它们。 app.Use(async(httpContext,next)=> { if .Request.Path.Value.Contains(api /)&&& httpContext.Request.Method ==OPTIONS) { httpContext.Response.Headers.Add(Access Control -Allow-Origin,new [] {httpContext.Request.Headers [Origin]}); httpContext.Response.Headers.Add(Access-Control-Allow-Headers,new [] {原始,请求的X请求,内容类型,接受}); httpContext.Response.Headers.Add(访问控制允许方法,新[] {GET,POST,PUT, DELETE,OPTIONS}); httpContext.Response.Headers.Add(Access-Control-Allow-Credentials,new [] {true}); return; } await next(); }); }

解决方案

请添加您自己的中间件。这里是一个快速添加它的内联示例,但你也可以封装在一个类中:

app.Use(async(httpContext, next)=> { if(httpContext.Request.Path.Value.Contains(api /)&&& httpContext.Request.Method ==OPTIONS) { httpContext.Response.Headers.Add(Access-Control-Allow-Origin,new [] {httpContext.Request.Headers [Origin]}); httpContext.Response.Headers。 Add(Access-Control-Allow-Headers,new [] {Origin,X-Requested-With,Content-Type,Accept}); httpContext.Response.Headers.Add -Allow-Methods,new [] {GET,POST,PUT,DELETE,OPTIONS}); httpContext.Response.Headers.Add(Access-Control-Allow-Credentials,new [] { true}); return; } await next(); });

您可能还想关注正在进行的工作以支持ASP 5框架

I'm upgrading my WebApi(s) to MVC6.

In WebApi I could intercept every HTTP request and if it was a preflight I could respond with headers the browser would accept.

I'm trying to figure out how to do the same thing in MVC6 WebApi.

Here is the WebApi code.

protected void Application_BeginRequest(object sender, EventArgs e) { if (Context.Request.Path.Contains("api/") && Context.Request.HttpMethod == "OPTIONS") { Context.Response.AddHeader("Access-Control-Allow-Origin", Context.Request.Headers["Origin"]); Context.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); Context.Response.AddHeader("Access-Control-Allow-Credentials", "true"); Context.Response.End(); } }

How do I do the same thing with MVC6?

Thanks, Bob

Here is my next attempt based on feedback. I could probably figure this out on my own if I understood the middleware pipeline. I'll learn it now of course.

I tried this code but it's not hit on http requests as I had hoped.

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // Configure the HTTP request pipeline. app.UseStaticFiles(); // Add MVC to the request pipeline. app.UseMvc(); // Add the following route for porting Web API 2 controllers. // routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}"); // custom middleware to checked each call as it comes in. app.Use(async (httpContext, next) => { if (httpContext.Request.Path.Value.Contains("api/") && httpContext.Request.Method == "OPTIONS") { httpContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { httpContext.Request.Headers["Origin"] }); httpContext.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Origin, X-Requested-With, Content-Type, Accept" }); httpContext.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" }); httpContext.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" }); return; } await next(); }); }

解决方案

You can add your own middleware for that. Here is a quick example adding it inline, but you could also encapsulate in a class:

app.Use(async (httpContext, next) => { if (httpContext.Request.Path.Value.Contains("api/") && httpContext.Request.Method == "OPTIONS") { httpContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { httpContext.Request.Headers["Origin"] }); httpContext.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Origin, X-Requested-With, Content-Type, Accept" }); httpContext.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" }); httpContext.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" }); return; } await next(); });

You will probably also want to keep an eye on the ongoing work to support cors within the ASP 5 framework

更多推荐

MVC6 Cors

本文发布于:2023-10-29 09:37:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1539358.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Cors

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!