我可以在 asp net razor 项目类型中使用 mvc 控制器吗?

Can i use mvc controllers in an asp net razor project type?

我刚开始使用 Razor 页面而不是 MVC 方法。

在我的剃须刀页面中,我有一个组合框,用户可以在其中切换语言

  <form asp-action="ChangeLanguage" asp-controller="Home" method="post"> 
    <input type="hidden" id="returnUrl" name="returnUrl" value="@Model.returnUrl" />
         <select id="culture"
             name="culture"
             class="form-control"
             onchange="this.form.submit();"
             asp-items="@Model.cultureItems"
             asp-for="@Model.requestCulture.RequestCulture.UICulture.Name">
        </select>
  </form>

组合框已填充可用语言,没有任何问题。

当我 select 执行下拉菜单时 post 但我的控制器中的方法从未收到请求

public class HomeController : Controller
{
    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult ChangeLanguage(string culture, string returnUrl)
    {
        Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
                new CookieOptions
                {
                    Expires = DateTimeOffset.UtcNow.AddDays(7)
                }
        );

        return LocalRedirect(returnUrl);
    }
} 

检查请求后,posturl似乎无效

Request URL: https://localhost:44350/
Request Method: POST
Status Code: 200 
Remote Address: [::1]:44350
Referrer Policy: strict-origin-when-cross-origin

我在这里遗漏了什么吗? 一般来说,我可以在 Razor 页面项目类型中使用 MVC 控制器吗?

呈现的html是

<form method="post" action="">

    <input type="hidden" id="returnUrl" name="returnUrl" value="/">

       <select id="culture" name="culture" class="" onchange="this.form.submit();" data-val="true" data-val-required="The Name field is required.">
           <option value="el-GR">Ελληνικά (Ελλάδα)</option>
           <option selected="selected" value="en-US">Αγγλικά (Ηνωμένες Πολιτείες)</option>
       </select>

      <input name="__RequestVerificationToken" type="hidden" value="removed_for_simplicity">
</form>

另一项更新正在将表格更改为

<form method="post" action="/Home/ChangeLanguage">

并使用

[HttpPost]
[ValidateAntiForgeryToken]
[Route("Home/ChangeLanguage")]
public IActionResult ChangeLanguage(string culture, string returnUrl)

但现在我有一个 404 错误

我终于可以在 razor 页面中使用 MVC 控制器了。 Startup 文件中的 MapControllers() 扩展方法发挥了作用。

    app.UseEndpoints(endpoints => {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
    });