MVC 空路由 ID 将我带到 spa(angular) 而不是返回错误的请求

MVC null route ID takes me to spa(angular) rather than returning a bad request

我一直在寻找这个问题一段时间,但还没有找到答案。简而言之,我有一个使用 angular spa 模板的 .net 核心 Web 应用程序。我有多个充当 API 的控制器,通常一切正常。但是在以下情况下,我很好奇是否有另一种方法可以在不重载操作的情况下完成发送空 ID。

这是我所拥有的并且按预期工作:

[HttpGet("[action]")]
public IActionResult SayHello()
{
    return BadRequest(new
    {
        error = "Name registered as null.",
        message = "No value(null) was provided to the api resource 'SayHello' which resulted in no action taken."
    });
}

[HttpGet("[action]/{name}")]
public IActionResult SayHello(string name)
{
    return Ok($"Hello {name}");
}

我想知道的是,我可以在不重载的情况下完成这个吗?例如,只需这样做:

[HttpGet("[action]/{name}")]
public IActionResult SayHello(string name)
{
    if (name == null)
    {
        return BadRequest(new
        {
            error = "Name registered as null.",
            message = "No value(null) was provided to the api resource 'SayHello' which resulted in no action taken."
        });
    }
    return Ok($"Hello {name}");
}

目前当我尝试这样做时,null id 路由将被视为不存在,路由将被传递给 angular 来处理。超载是实现此目标的首选且唯一的方法吗?或者有别的办法吗?

根据您在前端所做的工作,重要的是要记住字符串可以为空而不是 null。 此外,您还必须删除没有参数的路由。考虑以下代码:

[HttpGet("[action]/{name}")]
public IActionResult SayHello(string name)
{
    if (string.IsNullOrEmpty(name))//this
    {
        return BadRequest(new
        {
            error = "Name registered as null.",
            message = "No value(null) was provided to the api resource 'SayHello' which resulted in no action taken."
        });
    }
    return Ok($"Hello {name}");
}

找到答案了,而且很简单。只需要在操作方法中添加另一个属性。

[HttpGet("[action]")]
[HttpGet("[action]/{name}")]
public IActionResult SayHello(string name)
{
    if (name == null)
    {
        return BadRequest(new
        {
            error = "Name registered as null.",
            message = "No value(null) was provided to the api resource 'SayHello' which resulted in no action taken."
        });
    }
    return Ok($"Hello {name}");
}