从mvc 4应用程序调用Web Api RTM的正确方法

时间:2012-08-31 09:29:56

标签: c# .net asp.net-mvc-4 asp.net-web-api

所以有一堆例子,但找到与rtm位相关的例子似乎有点难以找到。

我有2个项目,一个是WebApi&另一个是MVC4 .net 4.5应用程序。

我想对项目进行更新

我的API中有一个类似

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

这是对的吗?我应该使用HttpResponseMessage而不是仅使用我的MyModel类吗?我希望尽可能多地返回正确的httpstatus详细信息,因为我想打开这个api给第三方而不仅仅是我的应用程序

从我的控制器调用我的mvc应用程序中的api我该怎么办?

2 个答案:

答案 0 :(得分: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);;
}

如果我想从我的MVC应用程序中调用WebApi方法,我主要使用EasyHttp

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);

答案 1 :(得分:0)

如果你想用httpstaus代码回复,你必须返回HttpResponseMessage。

您可以选择使用通用方法返回BO并从Action和其他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;
}