我在MVC中有一個API。它配置如下:ASP.NET MVC API發佈數據
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "API/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我使用自定義的路由我的API,使RESTful服務的一個例子是以下控制器
[RoutePrefix("datapi/user")]
public class UserController : ApiController
{
[EnableCors("*", "*", "*")]
[Route("getuser/{userid}/")]
[System.Web.Http.HttpGet]
public ObjUser GetUserObject(string userid)
{
ObjUser user = this.userdata.GetUser(userid);
return user;
}
[EnableCors("*", "*", "*")]
[Route("updatepassword")]
[System.Web.Http.HttpPost]
public ObjUser UpdateUserPassword(string userid, string password)
{
ObjUser user = this.userdata.GetUser(userid);
user.Password = password;
this.userdata.SaveUser(user);
return user;
}
}
的「的getUser」法正常工作。我在我的應用程序中獲得Json格式的對象
當我使用HttpPost服務(updatepassword)時出現問題。我試圖通過HttpPost發送數據,它給了我一個CORS錯誤,說
「跨來源請求阻止:同源策略不允許 讀取遠程資源」
有什麼問題與我的配置?
以下是測試我有兩個
$.ajax({
url: 'http://localhost:3351/datapi/user/updatepassword'
type: 'POST',
data: {
userid: '[email protected]',
password: 'newpassword'
},
contentType: 'application/json',
success: function(data) {
console.log(data);
}
});
$.ajax({
url: 'http://localhost:3351/datapi/user/getuser/[email protected]'
type: 'GET',
contentType: 'application/json',
success: function(data) {
console.log(data);
}
});
編輯完成:多個測試結果
所以我有預感,我測試用的服務如下:
$.ajax({
url: 'http://localhost:3351/datapi/user/updatepassword/[email protected]/somepassword'
type: 'POST',
contentType: 'application/json',
success: function(data) {
console.log(data);
}
});
這工作。但是,如果輸入中的任何一個包含冒號「:」,則會發出CORS錯誤!前進的道路是兩條路徑,一條限制輸入「:」,另一條將其轉換爲unicode。這個API很安靜,但其他一些人建議將Ajax數據中的數據作爲有效載荷提供,這將與restful api一起工作嗎?
您是否在ajax請求中將'crossDomain'設置爲'true'?嘗試一下 – Madhu 2015-03-13 06:18:34
我需要嗎?我在MVC中使用EnableCors並且getuser工作得很好爲什麼是 – progrAmmar 2015-03-13 06:21:04