Как я могу определить, как URL будет отображаться в браузере? - PullRequest
0 голосов
/ 15 января 2019

По сути, у меня есть простое приложение с прикрепленными ниже классами.

Теперь по какой-то причине, которую я не могу понять, страница по умолчанию будет отображаться с использованием http://localhost:[port]/Login/Index,, что хорошо.

Это покажет страницу индекса с формой входа, созданной как частичное представление.

Почему-то, когда я ввожу имя пользователя и пароль вместо того, чтобы заходить в метод входа в систему. Он просто обновляет страницу, но просто изменяет URL-адрес на http://localhost:[port]/Login/Login.

После того, как я вставил учетные данные, если они все в порядке, он перенаправит меня на нужную страницу, если нет, то отобразит сообщение об ошибке на экране и изменит URL еще раз на * 1016. *

В чем может быть проблема? У меня такое ощущение, что это как-то связано с формой: имя контроллера и имя действия , на которое указывает «Логин / Вход», но тогда почему весь путь отображается в URL?

Есть предложения?

RouteConfig.cs

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 = "Login", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

Index.cshtml

@{
    ViewBag.Title = "Login Portal";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="horizontal-vertical-center">
    <ul class="nav nav-pills nav-justified">
        <li class="active"><a data-toggle="tab" href="#login">Login</a></li>
        <li><a data-toggle="tab" href="#register">Register</a></li>
    </ul>
    <div class="tab-content">
        <div id="login" class="tab-pane fade in active">
            @Html.Partial("Login")
        </div>
    </div>
</div>

Login.cshtml

@model BusinessService.DTO.Activity.UserDTO

@{
    Layout = null;
}

@using (Html.BeginForm("Login", "Login", FormMethod.Post, new { @class = "loginForm" }))
{
    @Html.AntiForgeryToken() // this is for prevent CSRF attack

    <div class="form-group">
        @Html.TextBoxFor(a => a.Email, new { @class = "form-control", @placeholder = "Email" })
        @Html.ValidationMessageFor(a => a.Email)
    </div>
    <div class="form-group">
        @Html.PasswordFor(a => a.Password, new { @class = "form-control", @placeholder = "Password" })
        @Html.ValidationMessageFor(a => a.Password)
    </div>

    if(ViewBag.ErrorMessage != null)
    {
        <div class="alert alert-danger" role="alert">
            @ViewBag.ErrorMessage
        </div>
    }

    <button type="submit" class="btn btn-primary">Login</button>
}

И, очевидно, главный контроллер, LoginController.cs

using BusinessService.DTO.Activity;
using BusinessService.Services.Interfaces;
using System.Web.Mvc;
using System.Web.Security;

namespace LoginPortal.Controllers
{
    public class LoginController : Controller
    {
        private ILoginService _loginService;

        public LoginController(ILoginService loginService)
        {
            this._loginService = loginService;
        }

        // GET: Login
        [AllowAnonymous]
        public ActionResult Index(string ReturnUrl)
        {
            if (ReturnUrl != "")
                TempData["returnUrl"] = ReturnUrl;

            return View();
        }

        public ActionResult Login()
        {
            if (!Request.IsAjaxRequest())
                return RedirectToAction("Index");

            return PartialView();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Login(UserDTO model)
        {
            if (ModelState.IsValid)
            {
                var userResult = _loginService.VerifyUser(model);

                if (userResult != null)
                {
                    if (!userResult.EmailConfirmed)
                        return RedirectToAction("ConfirmEmail");
                    else
                    {
                        FormsAuthentication.SetAuthCookie(userResult.Email, false);
                        Session["User"] = new { userResult.Id, userResult.FullName, userResult.Email };

                        return Redirect("http://localhost:49770/Admin");
                    }
                }
            }

            ViewBag.ErrorMessage = "Incorrect Username or Password";
            return View("Index");
        }

        private ActionResult Unauthorized()
        {
            return View();
        }

        private ActionResult ConfirmEmail()
        {
            return View();
        }
    }
}

Изображения ниже:

enter image description here

enter image description here

Обновление: Пожалуйста, найдите сетевой журнал ниже. Как видите, для доступа к методу Login (UserDTO dto) выполняется два вызова.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...