ASP.NET Core中的Controller使用示例
 更新时间:2020年04月13日 10:26:30   作者:Agile.Zhou  

这篇文章主要介绍了ASP.NET Core中的Controller使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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的元数据:

很长并没有截全。可以看到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也是一个抽象类,继承自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”;
}
}

运行一下:

虽然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”;
}
}

运行一下:

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”;
}
}

运行一下:

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

设计restful(web api)接口的时候可以继承ControllerBase
设计MVC系统的时候可以继承Controller
当一个POCO类名称包含”Controller”后缀或添加ControllerAttribute的时候框架会认为这是一个控制器
当一个类不想被框架当做控制器的时候可以添加NonControllerAttribute

到此这篇关于ASP.NET Core中的Controller使用示例的文章就介绍到这了,更多相关ASP.NET Core Controller内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:ASP.NET Core对Controller进行单元测试的完整步骤ASP.NET Core MVC如何实现运行时动态定义Controller类型ASP.NET Core Controller与IOC结合问题整理

ASP.NET
Core
Controller

相关文章
详解ASP.NET数据绑定操作中Repeater控件的用法.NET中的Repeater控件支持数据模板,而且可以自由地定义样式,这里我们就来详解ASP.NET数据绑定操作中Repeater控件的用法,需要的朋友可以参考下 2016-06-06
ASP.net连接Excel的代码ASP.net连接Excel的代码,这个是asp.net操作excel必须知道的基础,另外的技巧可以参考华域联盟之前发布的文章。 2010-03-03
asp.net下出现其中的组件“访问被拒绝”的解决方法asp.net下出现其中的组件“访问被拒绝”的解决方法… 2007-04-04
asp.net button 绑定多个参数asp.net button 绑定多个参数的代码 2008-11-11
asp.net使用ashx生成图形验证码的方法示例这篇文章主要介绍了asp.net使用ashx生成图形验证码的方法,结合实例形式分析了asp.net生成图形验证码的步骤、实现方法与相关注意事项,需要的朋友可以参考下 2017-07-07
ASP.NET State service状态服务的问题解决方法每次重启机器以后,在.NET2005上跑Web程序老是遇到这样的问题 2008-11-11
MVC网站开发之权限管理篇这篇文章主要为大家详细介绍了MVC网站开发之权限管理的相关资料,感兴趣的小伙伴们可以参考一下 2016-08-08
asp.net gridview分页:第一页 下一页 1 2 3 4 上一页 最末页这篇文章主要介绍了asp.net gridview分页:第一页 下一页 1 2 3 4 上一页 最末页,可使用上下键选中行,选中后点击修改,textbox获得gridview中的代码的数据,需要的朋友可以参考下 2014-12-12
ASP.NET验证码实现(附源码)这篇文章主要介绍了ASP.NET验证码实现过程,并为大家分享了源码下载,感兴趣的小伙伴们可以参考一下 2015-11-11
ASP.NET Core发送邮件的方法这篇文章主要为大家详细介绍了ASP.NET Core发送邮件的方法,告诉大家如何在ASP.NET Core中发送邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-05-05

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。