标签:head 框架 cli control rip api sde type 方式
项目开发决定使用angular2进行前后端分离开发,由我负责后端服务的开发,起初选择的是web api进行开发。对跨域访问通过API中间件+过滤器对跨域访问进行支持。开发一段后,通知需要移植到MVC4项目中一同发布angular2并且放弃API,但前期开发仍然需要分离开发。
想继续使用中间件和过滤器的方式对MVC中的Action进行操作和限制,但经过尝试后发现行不通。主要问题有几下几点。
1 <httpProtocol> 2 <customHeaders> 3 <add name="Access-Control-Allow-Origin" value="*" /> 4 <add name="Access-Control-Allow-Headers" value="Content-Type" /> 5 <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 6 </customHeaders> 7 </httpProtocol>
(其他headers的值:Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With, Authorizatio)
(请根据实际需要进行增减!)
在跨域请求时会先触发一次options请求,根据response的header中内容以及返回状态,确定是否要进行正式的GET、POST等请求。但是在实际开发中我们不可能对action进行重复标记处理http的请求特性(attribute)。
1 [HttpOptions] 2 [HttpPost] 3 public ActionResult Index() 4 { 5 return View(); 6 }
我的处理办法是在Global.asax中对所有options请求人为通过。来告诉client可以正常请求。
1 void Application_EndRequest() 2 { 3 if (this.Request.HttpMethod.ToUpper().Equals("OPTIONS")) 4 { 5 this.Response.Status = "200 OK"; 6 this.Response.StatusCode = 200; 7 this.Response.StatusDescription = "OK"; 8 this.Response.SubStatusCode = 200; 9 } 10 }
一个GET请求,跨域操作下会进行两次请求,一次OPTIONS、一次GET。其中GET请求的执行正像前边提到的,会根据OPTIONS请求的状态而触发。
标签:head 框架 cli control rip api sde type 方式
原文地址:http://www.cnblogs.com/cnlizhipeng/p/MVC_Angular2_Cross.html