Asp.Net Core WEB API 调用方法时出现404错误

4

我将尝试为Web API创建一个额外的Get方法,但返回值是404(方法未找到)。

在我的旧版API中,我创建了类似的方法:

[HttpGet]
[Route("api/MyNewMethodName")]
public object MyNewMethodName(string parameter1)
{}

并且对于呼叫:
myURL/api/MyNewMethodName?parameter1=somestring

在我的控制器定义中,我有以下内容:
[Produces("application/json")]
[Route("api/MyController")]
public class MyController : Controller

对于完全相同的代码,我收到了404错误。

请问出了什么问题?


你的控制器有任何前缀装饰属性吗? - Shyju
在我的控制器中,我有:[Produces("application/json")] [Route("api/MyController")] public class MyController : Controller - GCoe
请将问题更新一下。 - Shyju
2个回答

4

您的控制器已定义了路由。因此,对于您的操作方法,它将是为控制器定义的路由前缀 + 操作方法的路由模式。这意味着,使用您当前的代码,它将适用于以下请求

yourBaseUrl/api/MyController/api/MyNewMethodName?parameter1=somestring

这里api/MyController是控制器级别路由定义的一部分,而api/MyNewMethodName则来自于动作方法级别。

根据需要在控制器或方法级别修复路由前缀。例如,如果您希望您的动作方法响应/api/MyNewMethodName?parameter1=somestring,只需移除控制器级别上的Route装饰器。

[Produces("application/json")]
public class MyController : Controller
{
    [HttpGet]
    [Route("api/MyNewMethodName")]
    public object MyNewMethodName(string parameter1)
    {
        return "Sample dummy response : "+parameter1;
    }
}

请注意,删除控制器级别的路由可能会破坏该控制器中其他操作方法的路由。如果您希望保留现有路由(包括控制器级别路由属性),您可以更新操作方法级别的路由模式以以 / 开头。

[Produces("application/json")]
[Route("api/MyController")]
public class MyController : Controller
{
    [HttpGet]
    [Route("/api/MyNewMethodName")]
    public object MyNewMethodName(string parameter1)
    {
        return "Some test"+parameter1;
    }
    [HttpGet]
    [Route("SecondMethod")]
    public object SecondMethod(string parameter1)
    {
        return "SecondMethod : "+parameter1;
    }
}

好的,你的第一个建议现在可以了,第二个建议也可以。但是在第二种情况下,如果删除Route装饰器,标准的get方法将不再被路由。 - GCoe
在这种情况下,将路由前缀放回,并使用波浪符(~)更新所需的操作以覆盖前缀,例如:[Route("~/api/MyNewMethodName")]。参考ASP.NET Core中的控制器操作路由ASP.NET Core中的路由 - Nkosi
/ 开头的路由模式在这种情况下也可以使用。 - Shyju

0

[HttpGet]

[Route("api/[controller]/MyNewMethodName")]

public object MyNewMethodName(string parameter1) {

}

尝试声明上述格式,这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接