新手在这里学习了很多MVC和Web API的东西。
我定义了一个Web API(WebAPIController)(GET,GET / Id,PUT,POST,DELETE),我想在我的MVC控制器中使用它。
P.S。我已经验证了WebAPI调用使用POSTman(Chrome扩展程序)。
我的代码如下:
在我的MVCController中:
namespace MyApp.Controllers
{
public class MVCController : Controller
{
private WebAPIController webAPICtrl = new WebAPIController();
public ActionResult Index(int id)
{
var result = webAPICtrl.GetItem(id);
// How to parse the result value here..
// Need to validate some things on the result value.
}
}
}
结果变量的类型为:System.Web.Http.IHttpActionResult{System.Web.Http.Results.OkNegotiatedContentResult<TestItem>}
在VS的Locals窗口中,我可以看到嵌套在results变量下的是包含为TestItem类定义的项的Content。这些是我需要进行某种验证的值。所以从Locals窗口:
result
> System.Web.Http.Results.OkNegotiatedContentResult<...>
> Content
> ItemID
> ItemDescription
> Price
我需要掌握Content对象下的值。
我不确定我是否以正确的方式这样做,如果有人能提供更明确的方法来获取这些值,那将会有所帮助。
感谢任何输入。感谢。
答案 0 :(得分:1)
我有个好消息。调用Action方法时,MVC支持开箱即用的强类型模型。这意味着将对名称/值对解析查询,并自动创建在ActionMethod控制器上指定的类的新istance,并使用帖子中的值填充。只需在项目中创建一个具有您想要查看的属性的模型,然后在action方法中添加一个参数类型,如下所示:
[HttpPost]
public ActionResult MyActionMethod(myType mt){
if(ModelState.IsValid){
var price = mt.Price;
var itemid = mt.Itemid;
// etc.....
}
}
我经常在模型/ viewmodel中放置一个POST方法来完成所有幕后工作,并在返回时使用新值更改模型以进行回发。我根本不在控制器中进行任何解析....
答案 1 :(得分:0)
var content = result.Content.ReadAsAsync<{datatype to read to}>().Result;
作为一个问题,你的意思是直接从你的mvc控制器调用你的api控制器,还是你的mvc控制器的http调用?因为现在它不是对api控制器的http调用