2011-09-23 4 views
0

J'essaie de faire quelque chose comme this article suggère dans mon site MVC3. Cependant, je ne suis pas sûr de pouvoir utiliser Response.End dans mon action.Utilisation de Response.End dans une action MVC3

Ma question est, comment puis-je retourner un code d'état 401 à partir de mon action si le HttpContext.User == null?

public ActionResult WinUserLogOn(string returnUrl) { 
     var userName = string.Empty; 

     if (HttpContext.User == null) { 
      //This will force the client's browser to provide credentials 
      Response.StatusCode = 401; 
      Response.StatusDescription = "Unauthorized"; 
      Response.End(); 
      return View("LogOn"); //<== ???? 
     } 
     else { 
      //Attempt to Log this user against Forms Authentication 
     } 
+0

Quel semble être le problème avec le code que vous avez publié? – vcsjones

+0

Je suppose que mon code de réponse et sa description seront remplacés lorsque la vue sera retournée. –

+0

Alors que m.edmondson a raison avec sa réponse, 'Response.End()' va tout vider et tuer le thread, donc peu importe ce que vous faites après 'Response.End', sauf si vous le passez' false' . Ce n'est pas aussi clair que la réponse fournie cependant. – vcsjones

Répondre

5

Cela devrait faire ce que vous voulez:

return new HttpUnauthorizedResult(); 

qui retournera un HTTP 401 au navigateur. See the docs.

+1

+1. Response.End n'est pas nécessaire. – StriplingWarrior

+0

Bien que cela a fonctionné, je ne pouvais pas faire fonctionner les choses comme le suggère l'article. Fondamentalement tout ce qui se passe est le site redirige vers la page LogOn comme il se doit quand un utilisateur n'est pas authentifié. Je suppose que cette solution ne fonctionnera pas pour MVC. –

Questions connexes