ASP.NET Core MVC解决控制器同名Action请求不明确的问题

在Asp.Net Core MVC Web应用程序的开发过程当中,如果需要在控制器内使用同名的Action,则会出现如下图所示的问题:

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0
代码片段如下:

` //GET: /HelloWorld/Welcome
public string Welcome()
{
return "这是HelloWorld控制器下的Welcome Action方法.....";
}
//带参数的Action
  //GET: /HelloWorld/Welcome?name=xxxx&type=xxx
  public string Welcome(string name, int type)
  {
    //使用Http Verb谓词特性路由模板配置解决请求Action不明确的问题
    //AmbiguousMatchException: The request matched multiple endpoints. Matches:
    //[Controller]/[ActionName]/[Parameters]
    //中文字符串需要编码
    //type为可解析为int类型的数字字符串
    string str = HtmlEncoder.Default.Encode($"Hello {name}, Type is: {type}");
    return str;
  }`

只要在浏览器的Url地址栏输入"/HelloWorld/Welcome"这个路由地址段时,Asp.Net Core的路由解析中间件便抛出上图所示的请求操作不明确的问题。
根据官方文档的描述,可以在控制器内某一个同名的Action方法上添加HTTP Verb Attribute特性的方式(为此方法重新声明一个路由Url片段)来解决此问题。对HelloWorld控制器内,具有参数的"Welcome"这个Action添加HTTPGetAttr
修改后的代码如下:

//带参数的Action
//GET: /HelloWorld/Welcome?name=xxxx&type=xxx
[HttpGet(template:"{controller}/WelcomeP", Name = "WelcomeP")]
public string Welcome(string name, int type)
{
string str = HtmlEncoder.Default.Encode($"Hello {name}, Type is: {type}");
return str;
}

请求Url: Get -> "/HelloWorld/Welcome?name=xxxxx&type=0"

到此这篇关于ASP.NET Core MVC解决控制器同名Action请求不明确的问题的文章就介绍到这了,更多相关ASP.NET Core MVC控制器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Asp.net Core MVC中怎么把二级域名绑定到特定的控制器上

    应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情况下需要给不同的板块设置不同的二级域名,如新浪体育sports.sina.com.cn. 在asp.net core mvc中,如果要实现板块的效果,可能会给不同的板块建立不同的控制器(当然也有其他的技术,这里不讨论实现方式的好坏),在这种情况下,如何给控制器绑定上独有的二级域名,比如体育频道对应的控制器叫SportController,通过sports.XXX.com域名访问系统的时候,直接进入Sport

  • 详解如何在ASP.NET Core中编写高效的控制器

    通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可以专注于测试业务逻辑和数据访问代码.瘦控制器的另一个优点是,它更容易维护控制器的多个版本. 这篇文章讨论了使控制器变胖的坏习惯,然后探索了使控制器变瘦和易于管理的方法.我列出编写控制器的最佳实践可能并不全面,但我已经讨论了最重要的一些,并在适当的情况下提供了相关的源代码.在接下来的几节中,我们将研究什么是胖控制

  • Asp.Net Core控制器如何接收原始请求正文内容详解

    主要目标 在Asp.net Core控制器中,通过自定义格式化程序来映射自定义处理控制器中的"未知"内容.本文将给大家详细介绍关于Asp.Net Core控制器接收原始请求正文内容的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 简单案例 为了演示这个问题,我们用VS2017创建一个默认的Asp.net Core Web Api项目. [Route("api/[controller]")] [ApiController] public cl

  • ASP.NET Core MVC解决控制器同名Action请求不明确的问题

    在Asp.Net Core MVC Web应用程序的开发过程当中,如果需要在控制器内使用同名的Action,则会出现如下图所示的问题: https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0 代码片段如下: ` //GET: /HelloWorld/Welcome public string Welcome() { return "这是HelloWorld控制器下的Welco

  • ASP.NET Core MVC创建控制器与依赖注入讲解

    默认的IControllerActivator 在 ASP.NET Core 中,当 MVC 中间件接收到请求时,通过路由选择要执行的控制器和操作方法.为了实际的执行操作, MVC 中间件必须创建所选控制器的实例. 创建控制器的过程依赖众多不同的提供者和工厂类,但最终是由实现IControllerActivator接口的实例来决定的.实现类只需要实现两个方法: public interface IControllerActivator { object Create(ControllerCont

  • ASP.NET Core MVC中的模型(Model)

    目录 1.模型绑定 2.使用模型绑定 3.通过特性自定义模型绑定行为 4.从请求主体绑定格式化的数据 5.模型验证 6.自定义验证 7.客户端验证 8.远程验证 1.模型绑定 ASP.NET Core MVC 中的模型绑定将数据从HTTP请求映射到操作方法参数.参数既可以是简单类型,也可以是复杂类型.MVC 通过抽象绑定解决了这个问题. 2.使用模型绑定 当 MVC 收到一个HTTP 请求时,它会将其路由到一个控制器指定的操作方法.它基于路由数据来决定运行哪个操作,然后将值从HTTP请求绑定到操

  • ASP.NET Core MVC控制器请求依赖注入

    ASP.NET Core MVC 控制器应通过构造函数明确地请求它们地依赖关系,在某些情况下,单个控制器地操作可能需要一个服务,在控制器级别上的请求可能没有意义.在这种情况下,也可以将服务作为  Action 的参数. 依赖注入是一种如 Dependency Inversion Principle 所示的技术,允许应用程序松散耦合的模块组成. 1.构造函数注入 ASP.NET Core 内置的基于构造函数的依赖注入支持扩展到 MVC 控制器.通过只添加一个服务类型作为构造函数参数到控制器中,AS

  • ASP.NET Core MVC中的控制器(Controller)介绍

    操作(action)和操作结果(action result)是 ASP.NET MVC 构建应用程序的一个基础部分.在 ASP.NET MVC 中,控制器用于定义和聚合一组操作.操作是控制器中处理传入请求的一种方法.控制器提供了一种逻辑方式,将相似的操作组织起来,允许一些通用的规则(例如路由,缓存,授权)使用共同的应用.传入的请求通过 路由 映射到操作.ASP.NET Core MVC 中,控制器可以是任何以 “Controller” 结尾或继承自以 “Controller” 结尾的可实例化类.

  • 解决ASP.NET Core Mvc文件上传限制问题实例

    一.简介 在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢? 二.设置上传文件大小 1.应用程序级别设置 我们需要在 ConfigureServices方法中添加如下代码,设置文件上传的大小限制为60 MB. public void ConfigureServices(IServiceCollection services) { servicesConfigure<For

  • ASP.NET Core MVC 过滤器的使用方法介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Action 调用管道中运行,有时称为过滤器管道.MVC选择要执行的Action方法后,才会执行过滤器管道: 实现 过滤器同时支持同步和异步两种不同的接口定义.您可以根据执行的任务类型,选择同步或异步实现. 同步过滤器定义OnStageExecuting和OnStageExecuted方法,会在管道特定

  • asp.net core mvc实现伪静态功能

    在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理的话,肯定会给服务器造成很大的资源浪费.但是我们又不能针对这些内容都独立制作静态页,所以我们可以在系统中利用伪静态的方式进行处理,至于什么是伪静态,大家可以百度下.我们这里就来介绍一下,在asp.net core mvc中实现伪静态的方式. mvc框架中,view代表的是视图,它执行的结果就是最终输出到客户端浏览

  • 详解ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满满的干货,你值得拥有. 探讨枚举绑定方式 我们首先给出要绑定的枚举类. public enum Language { JavaScript, Java, C, Python, SQL, Oracle } 枚举绑定方式一(@Html.DropDownList) 接下来我们废话少说直接进入主题. 复制代

随机推荐