MVC控制器到API控制器

时间:2015-09-30 21:15:37

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

我已经编写了一个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。

1 个答案:

答案 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,并详细了解如何操作。

您的问题太广泛,也许其他用户可以关闭它。我认为您尝试实施并寻求帮助发布您尝试过的代码是很好的。