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;
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 将mvc 5应用程序连接到Azure中的ACS?
- ASP.NET MVC发布模型ID的更好方法是什么?
- ASP.NET MVC Project和App_Code文件夹
- asp.net – global.asax Application_Error不触发
- asp.net-mvc – 如何在ASP.NET MVC中执行[RequireHttps(Red
- asp.net – Web部署项目的更好替代品
- asp.net – 如何从相同的解决方案的MVC项目调试Web API项目
- 使用离线功能构建ASP.Net Web应用程序
- 在asp.net MVC Javascript事件中没有命中断点
- asp.net-mvc-4 – 工作单元和通用存储库与实体框架5
- asp.net-mvc-3 – 实体框架乐观并发异常未发生
- asp.net – 使用Html.EditorFor生成具有特定行数
- asp.net按钮点击w / javascript“你确定吗?”在
- asp.net-mvc – TextBoxFor中限制为2位小数
- asp.net-mvc – 如何更改MVC Core ValidationSum
- asp.net – Internet Explorer中的“通过电子邮件
- ASP Classic – XML Dom
- 为不同的ASP.NET MVC 3区域提供不同的登录页面
- asp.net-mvc – 为什么我不能从Web平台安装程序安
- iis – 禁用应用程序池的空闲超时是否有任何危害
