[英]Posting json data using Angular JS $http.post() to WCF REST fails in Chrome but success in IE
1-添加了應用程序內的所有標頭設置_Start()WCF項目的global.asax文件的事件。 http://www.codeproject.com/Articles/845474/Enabling-CORS-in-WCF
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST,PUT,DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, x-requested-with");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
2- WebApiConfig文件中的已啟用的cors http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-cors
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.EnableCors();
}
}
3-要為單個操作啟用CORS,請在控制器的操作方法上修飾[EnableCors]屬性。
public class VideoController : ApiController
{
[Route("PostComment")]
[HttpPost]
[EnableCors(origins: "*", headers: "*", methods: "POST")]
public HttpResponseMessage PostComment([FromBody] DTOUserComment comment)
{
HttpResponseMessage response = null;
try
{
IVideoDetails vdo = BaseServices.videoDetails();
vdo.UpdateComments(comment);
response = Request.CreateResponse(HttpStatusCode.OK, "Success");
}
catch (UnauthorizedAccessException ex)
{
response = Request.CreateErrorResponse(HttpStatusCode.Unauthorized, ex.Message);
}
catch (Exception ex)
{
response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
}
return response;
}
}
4-從Angular js $ http.post()發布數據
$scope.publishComment = function () {
var myJSONData ={"UserName":"Asif"};
var req = {
method: "POST",
url: "http://localhost:55590/api/BaseAPI/postcomment",
data: myJSONData
};
$http(req).then(function(response){
alert("success");
},function(reason){
alert("error");
});
在添加CORS之前,Chrome瀏覽器中的webapi響應代碼為“405 Method not found”錯誤:
在WebAPi中添加CORS后,響應狀態代碼為“200 OK”,但仍然請求標題顯示“OPTION”但不顯示“POST”,數據發布失敗:
非常感謝任何幫助。謝謝。
我似乎通過修改頭信息修改Global.asax.cs來解決這個問題:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, Api-Version");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
另外我的角度代碼看起來像這樣:
$http.defaults.useXDomain = true;
delete $http.defaults.headers.common['X-Requested-With'];
var req = {
url: BASEURL + 'Login',
method: "POST",
headers: {
'Content-Type': 'application/json; charset=utf-8'
},
data: {
userName: username, password: password, isPersistent: true
}
}
$http(req)
.success(function (response) {
console.log(response);
callback(response);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.