Идентификатор нулевого маршрута MVC приводит меня в спа (угловой), а не возвращает неверный запрос
Я долго искал этот вопрос, но пока не нашел ответа. Вкратце, у меня есть базовое веб-приложение.net, использующее шаблон angular spa. У меня есть несколько контроллеров, которые действуют как API, и в целом все работает нормально. Однако в следующей ситуации мне любопытно, есть ли другой способ выполнить отправку нулевого идентификатора БЕЗ перегрузки действия.
Вот что у меня есть и работает как положено:
[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}");
}
В настоящее время, когда я пытаюсь это сделать, маршрут с нулевым идентификатором будет рассматриваться, как будто он не существует, и маршрут будет передан в angular для обработки. Является ли перегрузка предпочтительным и единственным способом добиться этого? Или есть другой способ?
2 ответа
Нашел ответ, и это довольно просто. Просто нужно добавить еще один атрибут к методу действия.
[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}");
}
В зависимости от того, что вы делаете во внешнем интерфейсе, важно помнить, что строка может быть пустой, а не нулевой. Кроме того, вам нужно будет удалить маршрут без параметра. Рассмотрим код ниже:
[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}");
}