MVC 空路由 ID 将我带到 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 进行处理。 重载是实现此目的的首选和唯一方法吗? 还是有别的办法?

找到了答案,这很简单。 只需向操作方法添加另一个属性即可。

[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}");
}

根据您在前端执行的操作,请务必记住字符串可以是空的,而不是 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}");
}

最新更新