MVC6科斯 - 拦截预检

时间:2015-08-12 22:16:24

标签: cors asp.net-core-mvc preflight

我将我的WebApi升级到MVC6。

在WebApi中,我可以拦截每个HTTP请求,如果是预检,我可以使用浏览器接受的标题进行响应。

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

这是WebApi代码。

    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();
        }
    } 

我如何使用MVC6做同样的事情?

谢谢, 鲍勃

这是我根据反馈进行的下一次尝试。如果我了解中间件管道,我可能会自己解决这个问题。我当然要学习它。

我尝试了这段代码但是没有像我希望的那样点击http请求。

    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();
        });

    }

1 个答案:

答案 0 :(得分:3)

您可以为此添加自己的middleware。这是一个内联添加内容的快速示例,但您也可以封装在类中:

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: NoNo message found under code 'label.meetingDescription' for locale 'en_US'

您可能还需要关注ongoing work以支持ASP 5框架内的角色