2015-03-13 111 views
1

我在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一起工作嗎?

+0

您是否在ajax請求中將'crossDomain'設置爲'true'?嘗試一下 – Madhu 2015-03-13 06:18:34

+0

我需要嗎?我在MVC中使用EnableCors並且getuser工作得很好爲什麼是 – progrAmmar 2015-03-13 06:21:04

回答

0

Register方法,這樣我們已經達到的解決方案是一個複雜的結構,用戶名和密碼,因爲它的屬性和我們已經改變這樣

public ObjUser UpdateUserPassword(ApiUserParam userParam) 
{ 
    ObjUser user = this.userdata.GetUser(userParam.userid); 
    user.Password = userParam.password; 
    this.userdata.SaveUser(user); 
    return user; 
} 

現在我有太多後一個工作的Web服務和完全寧靜的方法。

0

嘗試添加以下代碼行的WebApiConfig.cs

config.EnableCors(new EnableCorsAttribute("*", "*", "POST")); 
+0

我相信這不是一個CORS問題了,請檢查我編輯的文章 – progrAmmar 2015-03-13 06:49:35