Я не мог обойти свои правила маршрутизации в ASP.NET Core.У меня есть следующие Back и Front-end приложения методов действия аутентификации пользователя.Поскольку оба эти метода действия имеют один параметр с разными или дополнительными аргументами в полезной нагрузке.Http-клиент не может на самом деле перемещаться по точному методу, поэтому выдает исключение с ошибкой «неоднозначность», и это правда, потому что оба эти метода HttpPost имеют один параметр с разными аргументами.Как убедиться, что метод срабатывает в соответствии с действием.Код следующий: -
Контроллер API: -
[Route("api/[controller]")]
public class AccountController: Controller
{
[HttpPost, ActionName("Login")]
public async Task<IActionResult> UserLogin(LoginDto user)
{
//Code goes here
}
[HttpPost, ActionName("Register")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UserRegistration(RegisterDto register)
{
//Code goes here
}
}
Служба API внешнего интерфейса
public async Task<IActionResult> GetLoginAsync(LoginDto loginUser)
{
var request = "/api/account";
var content = new StringContent(JsonConvert.SerializeObject(loginUser), Encoding.UTF8, "application/json");
try
{
var result = await ExecuteWithResiliencePolicies(() => _client.PostAsync(request, content));
return new StatusCodeResult((int)result.StatusCode);
}
catch (HttpRequestException)
{
return new StatusCodeResult(StatusCodes.Status503ServiceUnavailable);
}
}
public async Task<IActionResult> PostRegistrationAsync(RegisterDto registerUser)
{
var request = "/api/account";
var content = new StringContent(JsonConvert.SerializeObject(registerUser), Encoding.UTF8, "application/json");
try
{
var result = await ExecuteWithResiliencePolicies(() => _client.PostAsync(request, content));
return new StatusCodeResult((int)result.StatusCode);
}
catch (HttpRequestException)
{
return new StatusCodeResult(StatusCodes.Status503ServiceUnavailable);
}
}
Веб-контроллер: -
[HttpPost, ActionName("Login")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UserLogin(LoginDto user)
{
SetCorrelation();
if (!ModelState.IsValid)
{
return RedirectToAction(nameof(Login));
}
await _accountService.GetLoginAsync(user);
return RedirectToAction("Index", "Home");
}
[HttpPost, ActionName("Register")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UserRegistration(RegisterDto register)
{
SetCorrelation();
if (!ModelState.IsValid)
{
return RedirectToAction(nameof(Login));
}
await _accountService.PostRegistrationAsync(register);
return RedirectToAction("Index", "Home");
}
Веб-маршрутизация:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "WebRoute",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" },
constraints: new { id = "[0-9]+" });
});
API-маршрутизация: -
app.UseMvc(routes =>
{
routes.MapRoute(
name: "KtsWebAPIRoute",
template: "{controller=Posts}/{action=GetAsync}/{id?}");
routes.MapRoute(
name: "KtsAccountRoute",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Account", Action = "Login" },
constraints: new { id = "[0-9]+" });
});