大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 处理CORS预检请求到ASP.NET MVC操作,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个如何实现的示例:
控制器操作
public ActionResult GetData(string data) { return new JsonResult { Data = data.ToUpper(),JsonRequestBehavior = JsonRequestBehavior.AllowGet }; }
客户端代码
<script type="text/javascript"> $(function () { $("#button-request").click(function () { var ajaxConfig = { dataType: "json",url: "http://localhost:8100/host/getdata",contentType: 'application/json',data: JSON.stringify({ data: "A string of data" }),type: "POST",success: function (result) { alert(result); },error: function (jqXHR,textStatus,errorThrown) { alert('Error: Status: ' + textStatus + ',Message: ' + errorThrown); } }; $.ajax(ajaxConfig); }); }); </script>
现在,每当预检请求发生时,它返回一个500 HTTP代码,因为“data”参数为null,因为OPTIONS请求不传递任何值。
服务器应用程序已经在我的本地IIS中设置在端口8100&运行客户端代码的页面在端口8200上设置,以模拟跨域调用。
我还配置了主机(在8100)与以下标题:
Access-Control-Allow-Headers: Content-Type Access-Control-Allow-Methods: POST,GET Access-Control-Allow-Origin: http://localhost:8200
我发现一个解决方法是检查HTTP方法执行操作&如果它是一个OPTIONS请求只返回空白内容,否则执行动作代码。像这样:
public ActionResult GetData(string data) { if (Request.HttpMethod == "OPTIONS") { return new ContentResult(); } else { return new JsonResult { Data = data.ToUpper(),JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } }
但这种方法对我来说很蠢。我考虑添加这种逻辑到属性,但即使这意味着装饰每个动作,将使用CORS调用它。
有没有更优雅的解决方案,让这个功能工作?
然后,如果客户端确认允许基于从预检检测返回的报头执行请求,则执行实际的POST,执行控制器动作。和我的代码示例:
protected void Application_BeginRequest() { if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") { Response.Flush(); } }
如前所述,这对我有用,但如果有人知道更好的方法,或我目前的实施中的任何缺陷,我将感激听到他们。
以上是大佬教程为你收集整理的asp.net-mvc – 处理CORS预检请求到ASP.NET MVC操作全部内容,希望文章能够帮你解决asp.net-mvc – 处理CORS预检请求到ASP.NET MVC操作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。