Код записан однажды, и читайте 10 раз. Таким образом, необходимо попытаться сделать максимально легким понять.
кроме того, отладка намного более трудна, чем запись кода. Таким образом, как можно когда-либо отлаживать код, когда Вы уже помещаете всю свою интеллектуальную элиту в запись сложного кода?
Просто попытка следовать Три Закона Разработки программного обеспечения :
Вы можете найти значение строки запроса ? ReturnUrl =
или создать свой собственный фильтр авторизации и установить поле в TempData
с указанием причины.
Вот пример простой настраиваемый фильтр, который поможет:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
// NOTE: This is not thread safe, it is much better to store this
// value in HttpContext.Items. See Ben Cull's answer below for an example.
private bool _isAuthorized;
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
{
_isAuthorized = base.AuthorizeCore(httpContext);
return _isAuthorized;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if(!_isAuthorized)
{
filterContext.Controller.TempData.Add("RedirectReason", "Unauthorized");
}
}
}
Тогда, по вашему мнению, вы можете сделать что-то вроде этого:
@if(TempData["RedirectReason"] == "Unauthorized")
{
<b>You don't have permission to access that area</b>
}
(Хотя я бы рекомендовал лучший подход, чем эти волшебные строки, но вы поняли)