Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Dotnet核心可以';无法区分名称相同但参数不同的操作?_C#_Asp.net Mvc_Asp.net Core Mvc - Fatal编程技术网

C# Dotnet核心可以';无法区分名称相同但参数不同的操作?

C# Dotnet核心可以';无法区分名称相同但参数不同的操作?,c#,asp.net-mvc,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core Mvc,下面的代码 public class OrderController : Controller { // GET api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 public string Get(int id) {

下面的代码

public class OrderController : Controller
{   
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}
公共类OrderController:控制器
{   
//获取api/值
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
//获取api/values/5
公共字符串Get(int-id)
{
返回“值”;
}
}
它在ASP.NET 4.5上运行良好,但在dotnet core 1.1上不起作用。错误消息:

失败:Microsoft.AspNetCore.Mvc.Internal.ActionSelector[1] 请求匹配多个操作,导致不明确。匹配操作:WebAPI.Controllers.OrderController.Get(WebAPI) WebAPI.Controllers.OrderController.Get(WebAPI)

失败:Microsoft.AspNetCore.Server.Kestrel[13] 连接id“0HL3F88N44HR6”:应用程序引发了未经处理的异常。 Microsoft.AspNetCore.Mvc.Internal.AmbiguousActionException:多个操作匹配。以下操作与路线数据匹配,并满足所有约束条件: WebAPI.Controllers.OrderController.Get(WebAPI) WebAPI.Controllers.OrderController.Get(WebAPI)

试着这样做:

// GET api/values/5
[HttpGet("Get/{id}"]
public string Get(int id)
{
    return "value";
}

您可以通过添加HttpGet属性来解决这个问题,如下所示

[HttpGet("{id}")]
// GET api/values/5
public string Get(int id)
{
    return "value";
}

这是因为在ASP.NET 5中,对于web API路由,使用了Routes.MapHttpRoute方法,对于ASP.NET MVC Routes.MapRoute方法。在ASP.NET Core中,使用Routes.MapRoute方法。

这不是ASP.NET.Core的问题,MVC4和MVC5中的行为完全相同

ASP.NET MVC不支持方法重载,有很多关于此的问题和文章:

  • 等等
可以有一套解决方案来获得所需的行为,其中一个共同点是:

首先-使用内置属性,该属性源自MVC4中的
ActionFilterAttribute
ActionMethodSelectorAttribute
(它是处理请求时检索所需操作的基类)。例如
ActionNameAttribute
HttpGetAttribute
httpposattribute
,等等:

public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

[ActionName("GetById")
public string Get(int id)
{
    return "value";
}

它在ASP.NET4.5中无法正常工作,请检查相关链接,这里描述了不同版本ASP.NETIt中的相同问题。Visual Studio生成的演示代码。奥尔兹
public object Get(int? id)
{
    if (id == null)
        return new string[] { "value1", "value2" };

    var passedId = (int) id;
    return GetValueByPassedId(passedId);
}