asp.net - 本地主机项目之间的跨域请求被阻止问题
问题描述
我编写了一种在 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 项目的客户端测试了客户端方法,它的工作。什么问题,谁能帮帮我?
解决方案
您将需要这样的操作过滤器属性:
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()
推荐阅读
- javascript - window.history.pushState 返回历史
- powershell - Powershell:存储和读取用户/密码列表
- html - 跨浏览器的 Flexbox 布局大不相同?
- c++ - 如何获取给定字体的可用字体样式
- angularjs - Angularjs 与页面视图源渲染
- android - 如何获取放置在另一个视图中的 EditText 值
- xpath - 尝试使用 XPath 将数据导入 Google 表格时出现 N/A
- android - 如何在移动应用程序中首次登录后以不同的布局启用 AlertDialog
- javascript - 内部带有数组循环的数组过滤器
- javascript - 禁用图表的网格线居中