asp.net-web-api – mvc webapi cross domain post
public void submit(Submission model) 至 public bool submit(Submission model) 不知道为什么,但现在我得到200 OK状态 HttpContext.Response.AddHeader("Access-Control-Allow-Origin","*"); 给我的控制器但现在在webApi我固有的:ApiController和这个技巧不起作用.显示编译器错误对象引用是非静态字段,方法或属性“System.Web.HttpContext.Response.get”所必需的 var model = { "type": $("#model-type").val(),"subject": $("#subject-text").val(),"body": $("#body-text").val() }; $.ajax({ type: "POST",dataType: 'JSONP',url: $("#submit-url").val(),data: model,success: function () { alert("Succesfully submitted"); },error: function () { alert("Error..."); } }); 我做错了什么? 解决了 感谢大家帮助我.我在一个评论链接中找到了解决方案.我使用以下方法,我觉得很简单. 我做了什么 public class CorsHandler : DelegatingHandler { const string Origin = "Origin"; const string AccessControlRequestMethod = "Access-Control-Request-Method"; const string AccessControlRequestHeaders = "Access-Control-Request-Headers"; const string AccessControlAllowOrigin = "Access-Control-Allow-Origin"; const string AccessControlAllowMethods = "Access-Control-Allow-Methods"; const string AccessControlAllowHeaders = "Access-Control-Allow-Headers"; protected override Task SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) { bool isCorsRequest = request.Headers.Contains(Origin); bool isPreflightRequest = request.Method == HttpMethod.Options; if (isCorsRequest) { if (isPreflightRequest) { return Task.Factory.StartNew(() => { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Headers.Add(AccessControlAllowOrigin,request.Headers.GetValues(Origin).First()); string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault(); if (accessControlRequestMethod != null) { response.Headers.Add(AccessControlAllowMethods,accessControlRequestMethod); } string requestedHeaders = string.Join(",",request.Headers.GetValues(AccessControlRequestHeaders)); if (!string.IsNullOrEmpty(requestedHeaders)) { response.Headers.Add(AccessControlAllowHeaders,requestedHeaders); } return response; },cancellationToken); } else { return base.SendAsync(request,cancellationToken).ContinueWith(t => { HttpResponseMessage resp = t.Result; resp.Headers.Add(AccessControlAllowOrigin,request.Headers.GetValues(Origin).First()); return resp; }); } } else { return base.SendAsync(request,cancellationToken); } } } >打开我的Global.asax并修改Application_Start: protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler()); } 注意行动的最后一行. 解决方法
分别回答你的问题:
>状态204不是错误,这意味着没有内容可以返回,但一切都很好.这是RFC2616中的204的定义
>你能说清楚你遇到的错误是什么ASP.NET Web API目前没有JSONP格式化程序.这里有第三部分实现: > http://www.west-wind.com/weblog/posts/2012/Apr/02/Creating-a-JSONP-Formatter-for-ASPNET-Web-API >在Web API中,您引用响应的方式不是通过HttpContext.有多种访问方式. 第一个选项是直接定义动作返回HttpResponse. public HttpResponseMessage Get(int id) { var response = this.Request.CreateResponse(); response.StatusCode = HttpStatusCode.OK; response.Headers.Add("Access-Control-Allow-Origin","*"); return response; } 第二个选项是使用ActionFilter: // define action filter for cross domain public class CrossDomainActionFilter : ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { bool needCrossDomain = true; if (needCrossDomain) { actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin","*"); } base.OnActionExecuted(actionExecutedContext); } } // At Controller // GET api/values/5 [CrossDomainActionFilter] public string Get(int id) { return "value"; } 最后一个选项是使用MessageHandler: public class CrossDomainMessageHandler : DelegatingHandler { protected async override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request,CancellationToken cancellationToken) { var response = await base.SendAsync(request,cancellationToken); response.Headers.Add("Access-Control-Allow-Origin","*"); return response; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 是否有一种方法来创建一个ActionLink与HTML
- asp.net-mvc – 有一个强大的方法来删除ASP.NET MVC中的Mod
- 简单好用的ASP.NET分页类(支持AJAX、自定义文字)
- asp.net-mvc – 添加视图模型类下拉列表不显示我的类
- ASP.NET Cookieless Forms在登录页面被加入书签时不设置coo
- ASP.net MVC v2 – 调试模型绑定问题 – BUG?
- asp.net-mvc – 什么是应用程序洞察遥测(未配置)在做什么?
- asp.net-mvc – ASP.Net MVC:发送JSON到控制器
- mvc项目架构搭建之UI层的搭建 架构搭建初步
- .NET Core多平台项目模板eShopOnContainers编译手记
- Asp.Net在Sql中选择
- asp.net-mvc – ASP.Net MVC 3 – HandleError属
- asp.net-mvc – 用于MVC网格的Kendo UI如何隐藏I
- ASP.net Core中正确的标记用法是什么? TagHelpe
- asp.net – 仅在本地IIS服务器上支持创建虚拟目录
- asp.net-web-api – 如何使ASP.NET Web API只返回
- asp.net-mvc-4 – 使用web.config中的凭据设置配
- asp.net – 自定义日期colmn telerik网格的过滤器
- asp.net-mvc-3 – html.TextBoxFor和html.Textbo
- 在ASP.Net应用程序和最佳实践中使用WCF