Использование олицетворения для проверки пользователя в Razor Pages - PullRequest
0 голосов
/ 12 июля 2020

У меня есть веб-приложение, написанное на asp. net, где я проверял имя пользователя с помощью этого простого кода:

            string[] userName = Context.Request.ServerVariables["LOGON_USER"].Split('\\');
            try {
                LabelUserName.Text = userName[1];
                LabelUserName.Visible = true;
                HiddenField1.Value = userName[1];
                ViewState["UserName"] = userName[1];
            }
            catch (Exception error)
            {
                System.Diagnostics.Debug.WriteLine("Cannot impersonate user: " + error.ToString());
                LabelUserName.Text = "UNKNOWN";
                LabelUserName.Visible = true;
                
            }

Я пытаюсь переписать это веб-приложение, используя Razor Pages с новейшими версиями. net core, но я немного запутался:

  1. как добавить этот код в _Layout (это мое предположение - до этого этот код был в MasterPage - он глобален для всех страниц - или, может быть, есть Другой способ?)?
  2. может быть лучший способ получить эту функциональность? Мне нужно получить windows логин для просмотра приложения пользователем.

1 Ответ

0 голосов
/ 13 июля 2020

Общий код будет перемещен в базовый класс (basepagemodel в случае страницы razor), а класс basepagemodel должен быть унаследован от PageModel, как показано ниже:

public class BasePageModel : PageModel
{
     public bool UserInfo
    {
        get
        {
            // play with httprequest and extract user login name, accesstoken, etc and perform validation according to your requirement
            return !string.IsNullOrEmpty(HttpContext.Request.Cookies["accesstoken"]);
        }
    }
    
    // another method
}

public class indexModel : BasePageModel
{
        // request handling here
}

Установить basepagemodel в качестве модели для страницы общего макета (_Layout ) как показано ниже:

@model Application.BasePageModel
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=EDGE" />
<title>@ViewData["Title"]</title>
<environment include="Development,Production">
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    <link rel="stylesheet" href="~/lib/jquery-ui/dist/css/jquery-ui.css" />
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
</environment>
</head>
<body>
 <div>
        <a>
             <strong>
               @{
                  <span style="margin-right:-2px;">Welcome</span>
                  if (Model.UserInfo)
                       {
                           <span>User Logged in</span>
                       }
                    }
              </strong>
         </a>
  </div>
 </body>
</html>
...