【问题标题】:Correct way to call WebApi RTM from an mvc4 application从 mvc 4 应用程序调用 Web Api RTM 的正确方法
【发布时间】:2012-08-31 09:29:55
【问题描述】:

所以周围有很多示例,但要找到与 rtm 位相关的示例似乎有点困难。

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

我想对一个项目进行更新

我的 API 中有一个控制器,它执行类似的操作

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

这是正确的吗?我应该使用 HttpResponseMessage 而不是只使用 MyModel 类吗?我想尽可能多地返回正确的 httpstatus 详细信息,因为我想将此 api 开放给第 3 方,而不仅仅是我的应用程序

从我的控制器从我的 mvc 应用程序调用这个 api 我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    最好的方法是像这样使用 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);
    

    【讨论】:

    • 谢谢 Erwin,从 mvc 应用调用这个方法怎么样?
    【解决方案2】:

    如果您想使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多