【问题标题】:MVC Controller to API Controller [closed]MVC 控制器到 API 控制器 [关闭]
【发布时间】:2015-12-28 19:27:30
【问题描述】:

我已经编写了一个 MVC 控制器。现在,我必须将 MVC 控制器的相同操作方法编码到 新的 API 控制器

将方法放入 API 控制器需要进行哪些更改?

例如。 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。

【问题讨论】:

  • 请查看问题。已经编辑过了。谢谢!

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


【解决方案1】:

您无法将 MVC 控制器转换为 API 控制器。两种类型都来自不同的基类。在 ASP.NET MVC 中,控制器必须从 Controller 类派生,而在 ASP.NET WEB API 中,控制器的基类是 ApiController。在这两种情况下,您都继承自自定义控制器基础,但这个必须继承自平台提供的原始基础控制器。

在 ASP.NET WEB API 中,结果格式由content-typehttp header 上提供。因此,您的客户端应用程序必须在content-type 属性上提供application/json,并且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 并详细了解如何操作。

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

【讨论】:

  • 我想我以错误的方式解释了我的问题。使用 convert 我的意思是实现一个 API 控制器。我已经有一个 MVC 控制器,但现在我需要使用与 MVC 中相同的方法来实现一个 API 控制器。我很好奇如何实现它。会发生什么变化?我想知道如何以任何基本方法为例来实现它。
  • 我明白了,好吧,编辑您的问题并发布您尝试过的示例代码或您的 mvc 控制器,我们可以与您合作:)
  • @RenuR 我已经编辑了我的答案,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2021-10-16
  • 2018-05-06
  • 2017-04-26
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多