首页 > 解决方案 > 本地主机项目之间的跨域请求被阻止问题

问题描述

我编写了一种在 webform asp.net 的客户端上传文件的方法,该方法使用 resumablejs 插件。另一方面,我在 mvc 项目的控制器上编写了一个方法,并在该项目的 webconfig 中激活了 cors 来源,如下所示:

<httpProtocol>
 <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
    <add name="Access-Control-Allow-Headers" value="*"/>
  </customHeaders>
</httpProtocol>

我也用过这个:

[EnableCors(origins: "http://localhost:10811", headers: "*", methods: "*")]
public class UploadController : ApiController
{}

但是当我在 Firefox 中调用上传方法时,控制台中出现此错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5023/Home/UploadFiles. (Reason: CORS request did not succeed)

chrome上的这个错误:

Response for preflight does not have HTTP ok status.

有一个问题:我用 mvc 项目的客户端测试了客户端方法,它的工作。什么问题,谁能帮帮我?

标签: asp.netasp.net-mvccors

解决方案


您将需要这样的操作过滤器属性:

public class AllowCORSAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.OnActionExecuting(filterContext);
    }
}

接下来根据您的要求将此属性应用于您的操作方法或控制器类。我建议在操作级别应用它,因为它不会使所有操作方法都可以跨组织访问:

[AllowCORS]
public ActionResult UploadFile()

推荐阅读