我已经编写了一个MVC控制器。现在,我必须将MVC控制器的相同操作方法编码为新API控制器。
将方法放在API控制器中需要进行哪些更改?
对于Eg。 MVC控制器代码
[HttpGet]
[EAuthorize(xyz)]
public ActionResult Trans()
{
var user = (User)WebSession.CurrentUser;
var mTrans = mTransLMgr.InitializeMTrans(user.currentSelectedEntity.Value);
mTransLMgr.AccNum = TController.GetAccountNumberBasedOnPrivilage(x,y);
return View(mTransLMgr);
}
如果我必须在API控制器中实现相同的方法,我将需要实现哪些更改。这些方法应该返回JSON。
答案 0 :(得分:0)
您无法将MVC控制器转换为API控制器。两种类型都来自不同的基类。在ASP.NET MVC中,控制器必须派生自Controller
类,而在ASP.NET WEB API中,控制器的基类是ApiController
。在这两种情况下,您都从自定义控制器库继承,但是这个必须从plataform提供的原始基本控制器继承。
在ASP.NET WEB API中,结果格式由http header
上提供的content-type
提供。因此,您的客户端应用程序必须在application/json
属性上提供content-type
,ASP.NET WEB API将以此格式为您序列化。样品:
public HttpResponseMessage Get(int id)
{
var user = (User)WebSession.CurrentUser;
var mTrans = mTransLMgr.InitializeMTrans(user.currentSelectedEntity.Value);
mTransLMgr.AccNum = TController.GetAccountNumberBasedOnPrivilage(x,y);
// return ok with the model serialized on the response body
Request.CreateResponse(HttpStatus.Ok, mTransLMgr);
}
我不确定你在WebSession.CurrentUser
上有什么,但是如果你在HttpContext.Session[key]
上使用密钥就不能这样做,因为ASP.Net是无状态的,你没有会话。
对于EAuthorize
,您必须在http标头中实现身份验证。您可以使用基本身份验证执行此操作,这是Rest应用程序的默认行为。我强烈建议您阅读文章Basic Authentication in ASP.NET Web API,并详细了解如何操作。
您的问题太广泛,也许其他用户可以关闭它。我认为您尝试实施并寻求帮助发布您尝试过的代码是很好的。