0

Я использую WebForms и Asp.Net Routing.После сброса исключения безопасности, перенаправление на страницу входа

При попытке реализации безопасности на папку членов, я, следуя указателям здесь:

http://blogs.msdn.com/b/mikeormond/archive/2008/06/21/asp-net-routing-and-authorization.aspx

private IHttpHandler GeneratePage(string VN, RequestContext RC) 
    { 
    string virtualPath 
     = string.Format("~/Members/{0}.aspx", VN); 

    if (UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, 
     RC.HttpContext.User, 
     RC.HttpContext.Request.HttpMethod)) 
    { 
     if (virtualPath != null) 
     { 
     return (Page)BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)); 
     } 
    } 
    else 
    { 
     throw new SecurityException(); 
    } 

    return null; 
    } 
} 

Однако, я не просто хочу, чтобы бросить исключение безопасности, я бы как перенаправление на страницу входа. Я бы предпочел не жестко кодировать Response.Redirect, и я не думаю, что это правильный способ сделать это в любом случае.

Что такое «правильный» способ передать управление механизму авторизации и перенаправить на страницу входа по умолчанию?

ответ

1

У вас не может быть обоих.

Преодоление исключения завершает путь кода.

В качестве альтернативы вы можете позвонить FormsAuthentication.RedirectToLoginPage(string extraQueryString) и передать аргумент, который позволяет вам сообщить пользователю о проблеме на странице входа.

например.

FormsAuthentication.RedirectToLoginPage("error=authorization-failure")

Вы бы, конечно, нужно писать код на странице входа, чтобы признать это.

+0

Спасибо. Мне было интересно, почему вы хотите просто выбросить ошибку безопасности в этом пространстве, но я предполагал, что вы сделаете переадресацию в блоке 'catch'. – Armstrongest

+0

@ Atømix - все зависит от того, кто занимается ловлей. вы сказали, что хотите бросить и перенаправить. единственный способ, которым вы можете это сделать, - это то, что вы делаете ловушку, и если это так, это не исключение, это ожидаемый случай и должен иметь соответствующий кодовый путь. Вы бы выбрали исключение, если вы ничего не можете сделать о состоянии. –

Смежные вопросы