首页 > 解决方案 > “/”应用程序中的服务器错误。ASP.Net MVC Visual Studio 2019

问题描述

每当我运行该程序时,它都能完美运行。但是,只要我点击“登录”按钮,它就会告诉我

说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/LoginController/Authorize

我检查了所有内容,拼写正确。我对此很陌生,无法弄清楚我做错了什么。任何指导将不胜感激。

App_Start文件夹里面我有我的RouteConfig.cs文件。它包含以下内容:

namespace CoffeeShop_Web_App
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "LoginController", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

我有一个控制器,它是我的LoginController.cs,它包含以下内容。

namespace CoffeeShop_Web_App.Controllers
{
    public class LoginController : Controller
    {
        // GET: Login
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Authorize()
        {
            return View();
        }
    }
}

最后,我唯一的观点Index.cshtml包含以下内容。

@model CoffeeShop_Web_App.Models.OwnerLogin
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Login</title>
    <style>
        #login-div {
            position: absolute;
            left: 40%;
            top: 40%;
            border: 1px solid #ccc;
            padding:  10px 10px;
        }


    </style>
</head>
<body>
    <div id="login-div">
        @using (Html.BeginForm("Authorize", "LoginController", FormMethod.Post))
        {
            <table>
                <tr>
                    <td></td>
                    <td style="text-decoration:underline">Coffee Shop</td>
                </tr>
                <tr>
                    <td>
                        @Html.LabelFor(model => model.USERNAME)
                    </td>
                    <td>
                        @Html.EditorFor(model => model.USERNAME)
                    </td>
                </tr>

                <tr>
                    <td></td>
                    <td>@Html.ValidationMessageFor(model => model.USERNAME)</td>
                </tr>

                <tr>
                    <td>
                        @Html.LabelFor(model => model.PASSWORD)
                    </td>
                    <td>
                        @Html.EditorFor(model => model.PASSWORD)
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>@Html.ValidationMessageFor(model => model.PASSWORD)</td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        <input type="submit" name="name" value="Login" />
                        <input type="reset" name="name" value="Clear" />
                    </td>
                </tr>
            </table>
        }
    </div>
    <script src="~/Scripts/jquery-3.4.1.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
</body>
</html>

标签: htmlasp.net-mvc

解决方案


您的表单正在回发到控制器的Authorize方法LoginController

@using (Html.BeginForm("Authorize", "LoginController", FormMethod.Post))

您不必为控制器的名称指定控制器后缀。以下应该解决它:

@using (Html.BeginForm("Authorize", "Login", FormMethod.Post))

您在设置路由时也犯了同样的错误:

defaults: new { controller = "LoginController", action = "Index", 
    id = UrlParameter.Optional }

这应该只是:

defaults: new { controller = "Login", action = "Index", 
    id = UrlParameter.Optional }

推荐阅读