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}");
}
我一直在寻找这个问题一段时间,但还没有找到答案。简而言之,我有一个使用 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}");
}