189 8069 5689

Controller怎么在ASP.NETCore项目中使用-创新互联

Controller怎么在ASP.NET Core项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联建站专业为企业提供罗山网站建设、罗山做网站、罗山网站设计、罗山网站制作等企业网站建设、网页设计与制作、罗山企业网站模板建站服务,十多年罗山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

ASP.NET CORE出现之前我们实现的Controller,MVC都继承自Controller基类,WebApi的话继承自ApiController。现在ASP.NET CORE把MVC跟WebApi合并了,已经不再区分MVC或者WebApi。ASP.NET CORE的Controller继承结构也发生了变化。我们看其他示例的时候会发现有些继承自Controller有些继承自ControllerBase。事实上ControllerBase是Controller的基类。也就是说如果你继承自Controller,其实就是继承了ControllerBase。那什么时候该选择直接继承ControllerBase呢?

ControllerBase

我们先看看ControllerBase的元数据:


Controller怎么在ASP.NET Core项目中使用


很长并没有截全。可以看到ControllerBase是个抽象类,并且实现了大量的虚方法。这些虚方法大都是对应了Http的状态码。
比如:

public virtual OkResult Ok(); //http status 200
public virtual NotFoundResult NotFound(); //http status 404
public virtual ForbidResult Forbid(); //http status 403
public virtual CreatedResult Created(Uri uri, [ActionResultObjectValue] object value); // http status 201
...还有很多很多...

显然这是为Restful Api设计的基类,所以当你要设计一个Restful(web api)接口的时候可以选择继承自ControllerBase,它已经可以满足你的需求。

Controller

查看下Controller的元数据:


Controller怎么在ASP.NET Core项目中使用


Controller也是一个抽象类,继承自ControllerBase,并且继承了几个接口。很明显Controller比ControllerBase多的内容主要是一些跟MVC打交道的东西。
比如:Viewbag、Viewdata属性,Json、View方法等:

public dynamic ViewBag { get; }
public ViewDataDictionary ViewData { get; set; }
public virtual JsonResult Json(object data);
public virtual ViewResult View();
...

所以如果你是需要实现一个MVC系统,想要使用cshtml模板跟razor试图引擎渲染页面则需要继承Controller。

POCO Controller

除了继承Controller、ControllerBase之外,ASP.NET CORE框架可以让你的POCO类直接变成Controller。

使用“Controller”后缀

下面的代码,TestController可以正常工作吗?

 [Route("api/[controller]")]
  public class TestController 
  {
    [HttpGet]
    public string Get()
    {
      return "TestController";
    }
  }

运行一下:


Controller怎么在ASP.NET Core项目中使用


虽然TestController类并没有继承自任何类,但是他确实可以在ASP.NET CORE框架内正常工作。ASP.NET CORE框架默认会查找后缀为“Controller”的类,并把它当做真正的Controller使用,在路由系统最终匹配Controller的时候它也会被尝试匹配。

使用ControllerAttribute

如果你的控制器类有什么特别需求,连类名都不想加入“Controller”的后缀,那么还有一种方法就是使用ControllerAttribute。

  [Controller]
  [Route("api/[controller]")]
  public class POCO 
  {
    [HttpGet]
    public string Get()
    {
      return "POCOController";
    }
  }

运行一下:


Controller怎么在ASP.NET Core项目中使用


POCO类并没有继承自任何类,并且也没有“Controller”后缀命名,但是因为它被标记了ControllerAttribute同样会被ASP.NET CORE框架认为是一个Controller。在路由系统最终匹配Controller的时候它也会被尝试匹配。

使用NonControllerAttribute

如果你的一个类名恰巧包含“Controller”的后缀,但你并不想ASP.NET CORE框架发现它,你可以在类上加上NonControllerAttribute。这样ASP.NET CORE框架就会忽略它。
改一下刚才的TestController,加上[NonController]:

  [NonController]
  [Route("api/[controller]")]
  public class TestController 
  {
    [HttpGet]
    public string Get()
    {
      return "TestController";
    }
  }

运行一下:


Controller怎么在ASP.NET Core项目中使用


/api/test已经匹配不到controller了。

总结

  • 设计restful(web api)接口的时候可以继承ControllerBase

  • 设计MVC系统的时候可以继承Controller

  • 当一个POCO类名称包含"Controller"后缀或添加ControllerAttribute的时候框架会认为这是一个控制器

  • 当一个类不想被框架当做控制器的时候可以添加NonControllerAttribute

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


名称栏目:Controller怎么在ASP.NETCore项目中使用-创新互联
链接URL:http://cdxtjz.cn/article/dshhee.html

其他资讯