【发布时间】:2019-07-22 14:18:33
【问题描述】:
我无法在 ASP.NET Core 中处理我的路由规则。我有以下用户身份验证操作方法的后端和前端应用程序。由于这两种操作方法在有效负载中都有一个带有不同或附加参数的参数。 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]+" });
});
【问题讨论】:
-
在您的前端 API 服务中,您是否尝试过使用请求网址
/api/account/Login和/api/account/Register? -
是的,我已经尝试过了,它会抛出错误 404。
-
尝试将
Route属性应用到您的 api 控制器而不是 ActionName 例如[Route("login")]public async Task<IActionResult> UserLogin(LoginDto user)
标签: c# asp.net-core asp.net-core-mvc asp.net-core-webapi