2015-06-19 15 views
5

Ho un problema. Quando provo a reindirizzare l'utente all'URL non http dall'azione MVC, restituisce:Reindirizzamenti restituisce "Oggetto spostato su"

Oggetto spostato qui.

risposta completa (da Fiddler):

HTTP/1.1 301 Moved Permanently 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Location: myGame-app://test.somespecificdata 
Server: Microsoft-IIS/8.0 
X-AspNetMvc-Version: 4.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcUGlvdHJcRGVza3RvcFxUYWtlc0NhcmVcVGFrZXNDYXJlXERvY3RvcnNcRWRvY3RvclxDb25zdWx0YXRpb25cMTkx?= 
X-Powered-By: ASP.NET 
Date: Thu, 18 Jun 2015 18:19:35 GMT 
Content-Length: 457 

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="myGame-app%3a%2f%2ftestprotocol.somespecificdata">here</a>.</h2> 

<!-- Visual Studio Browser Link --> 
<script type="application/json" id="__browserLink_initializationData"> 
    {"appName":"Firefox"} 
</script> 
<script type="text/javascript" src="http://localhost:53098/4c9c75263d91451fa797f9041e4bd0f3/browserLink" async="async"></script> 
<!-- End Browser Link --> 

</body></html> 

mia azione (con pseudo codice):

[HttpGet] 
public ActionResult Consultation(int id) 
{ 
     //.. specific business logic 
     if(IsMobile()){ 
      return RedirectPermanent("myGame-app://test.somespecificdata"); 
     } 
     else{ 
      return View("AboutGame", SomeSpecificModel); 
     } 
} 

La stessa situazione è con return Redirect() invece di return RedirectPermanent().

Il mio obiettivo principale è reindirizzare un utente che utilizza il browser mobile all'URL con protocollo speciale (non http). Questo protocollo speciale (myGame-app://) esegue la mia app mobile according to this Stack discussion. Come posso ottenere questo, senza informazioni Object moved to here?

saluti

risposta

0

I metodi/RedirectPermanent reindirizzamento aggiungere un corpo alla risposta contenente il "spostato qui" -HTML. Se si vuole una risposta "vuoto" è sufficiente impostare la risposta da soli:

HttpContext.Current.Response.Redirect("url", false); 
HttpContext.Current.Response.StatusCode = 301; 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

essere consapevoli del fatto che sarà eseguito il resto della tua logica dopo questo, in modo da assicurarsi che niente altro (filtri, ecc) che potrebbero reindirizzare la risposta di nuovo succede dopo averlo impostato.

Problemi correlati