Итак, у меня есть несколько общих действий, которые в настоящее время ссылаются на различные виды. Страница макета содержит вызов adfs для заполнения зарегистрированного имени пользователя, которое должно быть для каждой страницы. Похоже, это:Тот же код для каждого mvc actionresult в домашнем контроллере
<div class="float-right">
<section id="login">
Hello, <span class="username">@ViewBag.GivenName @ViewBag.LastName</span>!
</section>
</div>
В главном контроллере, что делает этот вход во имя работы этот код здесь:
public ActionResult Index()
{
ClaimsIdentity claimsIdentity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
Claim claimGivenName = claimsIdentity.FindFirst("http://sts.msft.net/user/FirstName");
Claim claimLastName = claimsIdentity.FindFirst("http://sts.msft.net/user/LastName");
if (claimGivenName == null || claimLastName == null)
{
ViewBag.GivenName = "#FAIL";
}
else
{
ViewBag.GivenName = claimGivenName.Value;
ViewBag.LastName = claimLastName.Value;
}
return View();
}
Но, как упоминалось ранее, мне это нужно, чтобы отобразить, когда пользователь переходит к каждая ссылка (actionresult). Поэтому мне нужно отправить весь код выше в каждый actionresult, чтобы достичь этого.
Есть ли способ, которым это может быть применимо к каждому действию в целом, а не к дублированию кода от одного действия к другому? Я попробовал только зарегистрироваться в actionresult для моего _Layout.cshtml и сделать вызов этого частичного просмотра, но это не принесло мне благоприятных результатов. Я уверен, что это что-то простое, что мне не хватает.
Надеясь, что некоторые из вас могут помочь. Большое спасибо.
@Mark ... есть каждый ActionResult в то же Класс контроллера? – MikeTWebb
Все это в одном классе контроллера. Пока что. Может пересмотреть позже. Есть ли другой ответ для обоих способов? – Mark
@Mark Да, если все ваши действия находятся в одном контроллере, просто переопределите метод OnActionExecuting этого контроллера. В противном случае вам необходимо рассмотреть базовые контроллеры или атрибуты. –