2012-08-31 28 views
0

調用的WebAPI RTM因此,有大約但要找到那些有相關的RTM位似乎有點難以找到實例堆。正確的方式從mvc4應用

我有2個項目之一是的WebAPI &另一個是MVC4 .NET 4.5應用。

我想打一個進行更新,以項目

我有我的API中的控制器,做類似

[HttpPut] 
    public MyModel Update(MyModel model) 
    { 
     //make update 
     return model; 
    } 

這是正確的嗎?我應該使用HttpResponseMessage而不是僅使用MyModel類嗎?我想盡可能地返回正確的httpstatus細節,因爲我想打開這個api給第三方,而不僅僅是我的應用程序

從我的控制器調用這個api從我的mvc應用程序如何做到這一點?

回答

0

的貝斯特的方法是使用HttpResponseMessage這樣的:

[HttpPut] 
public HttpResponseMessage Update(MyModel model) 
{ 
    if(notfound) 
    { 
     return this.Request.CreateResponse(HttpStatusCode.NotFound); 
    } 

    //make update 
    return this.Request.CreateResponse<MyModel>(HttpStatusCode.OK, Model);; 
} 

我主要使用EasyHttp如果我想要想從我的MVC應用程序調用的WebAPI方法:

var model = new ExpandoObject(); // or use a stronly typed class. 
model.Id = 1, 
model.Name = "foo" 

var http = new HttpClient(); 
http.Post("url", model, HttpContentTypes.ApplicationJson); 
+0

謝謝Erwin,那麼從mvc應用程序調用這個方法呢? –

+0

我更新了我的答案,並帶有一個調用樣例 – Erwin

0

如果你想使用httpstaus代碼進行響應,您必須返回HttpResponseMessage。

你可以選擇有一個共同的方式傳回的BO和行動,並從其他MVC應用程序代碼中調用它。然後,您的其餘呼叫將始終使用狀態碼包裝,其他呼叫將獲得一個對象。

[HttpPut] 
public MyModel Update(MyModel model) 
{ 
    return base.Request.CreateResponse<MyModel>(HttpStatusCode.OK, UpdateModel(model));; 
} 

[NonAction] 
internal MyModel UpdateModel(MyModel model) 
{ 
    //make update 
    return model; 
}