无法弄清楚控制器的路由工作原理

时间:2019-11-13 11:16:56

标签: c# asp.net blazor

我是ASP.Net的新手,并且正在使用Blazor服务器端构建一个网站,并且试图将客户端的表单发布到这样的控制器上:

客户端代码(位于 / pages 中):

private async void LogIn()
{
    isSubmitting = true;
    var json = JsonConvert.SerializeObject(logInForm);
    var data = new StringContent(json, Encoding.UTF8, "application/json");
    //The base adress correspond to "https://localhost:port/"
    string adress = WebClient.httpClient.BaseAddress + "log_in";
    var result = await WebClient.httpClient.PostAsync(adress, data);
    isSubmitting = false;
}

服务器代码(位于 / controllers 中):

public class UserController : Controller
{
    private readonly AppDbContext _db;
    public UserManager<AppUser> _manager;

    public UserController(AppDbContext db, UserManager<AppUser> manager)
    {
        _db = db;
        _manager = manager;
    }

    [Route("log_in")]
    [HttpPost]
    private async Task<IActionResult> LogIn([FromBody]LogInForm userForm)
    {
        var user = new AppUser { UserName = userForm.mail, Email = userForm.mail };
        var result = await _manager.CheckPasswordAsync(user, userForm.password);

        return null;
    }
}

执行此代码时,PostAsync()永远不会重定向到LogIn()方法并返回HTTP 400错误。

我首先学习了如何使用PostJsonAsync()进行操作,但是它是使用Blazor WebAssembly进行预览的,所以我不能在生产中使用它。我尝试首先在Internet上找到答案,但没有关于如何在Blazor服务器端执行此操作的明确信息。

有什么机会我可以快速,简单地说明我在做什么错?

1 个答案:

答案 0 :(得分:0)

asp.net中的默认路由为

if(startupCounter == null || startupCounter.isEmpty())
{
    startupCounter =[taskid: taskid, propkey:'startupcounter', propvalue:"420"];
    createResource('TaskProperty', startupCounter, false);
}

这意味着您正在寻找的网址可能是

weburl.com/{controller}/{action}

请参阅:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-3.0