In un progetto ASP.NET MVC, quando si decora una classe o un metodo con [Autorizza] e l'autorizzazione non riesce, il sito reindirizza automaticamente alla pagina di accesso (utilizzando l'account loginUrl specificato nel Web config). Inoltre, qualcosa nel framework ASP.NET MVC passa lungo l'URL della richiesta originale come parametro ReturnUrl.Cosa imposta inizialmente il parametro ReturnUrl quando si utilizza AuthorizeAttribute
Qual è la responsabilità di aggiungere questo ReturnUrl? Non sono riuscito a trovare alcun codice per questo nel modello di progetto. Ho anche dato un'occhiata al codice per AuthorizeAttribute nello stack ASP.NET source code ma non ho trovato nulla lì. Ho anche provato a cercare l'intero codice sorgente dello stack ASP.NET per "returnurl" ma non sono riuscito a trovare nulla.
La ragione per cui chiedo è che ho scoperto un bug in questo processo. Puoi vederlo con un nuovissimo progetto Internet ASP.NET MVC. Impostare il timeout FormsAuth su 1 minuto in web.config e quindi accedere. Attendere oltre un minuto e provare ad uscire. Ciò reindirizzerà alla pagina di login con un ReturnUrl di/account/disconnessione, che porta ad una 404 dopo l'accesso ho lavorato intorno a questo, per ora con la mia AuthorizeAttribute:.
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
string returnUrl = null;
if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", System.StringComparison.CurrentCultureIgnoreCase))
returnUrl = filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", returnUrl }
});
}
}
}
Tuttavia, vorrei dare un'occhiata alla fonte e vedere se riesco a capire perché questo bug esiste, se è davvero un bug.
Penso che faccia parte dell'autenticazione di moduli non solo specifica per MVC. L'URL di ritorno esiste anche in WebForm – Devesh
Potrebbe essere - Presumo che fosse qualcosa correlato a MVC poiché AuthorizationAttribute si trova nello spazio dei nomi MVC e l'override di OnAuthorization (come mostrato sopra) sembra aggirare il problema. –
http://msdn.microsoft.com/en-us/library/ff647070.aspx, può essere d'aiuto – Devesh