Réponse.Rediriger les résultats dans " objet déplacé vers ici"

je travaille sur un C# ASP.NET page qui finit normalement par rediriger vers une URL" file:". Cela semble bien fonctionner la plupart du temps, dans la majorité des circonstances, mais occasionnellement (et, sur mon système de test, apparemment toujours) au lieu d'une redirection vers un fichier, je reçois une page avec le texte "Object moved to here", où "here" est un lien vers le fichier que j'essayais de rediriger, mais avec quatre slashs après le deux-points au lieu de deux (i.e. "fichier:////testserver/docs/testdoc.doc")

Ceci est normalement accompagné d'un "Système.Le filetage.ThreadAbortException: Thread a été interrompue" message.

j'ai cherché une solution ailleurs et trouvé quelques trucs intéressant sur la Réponse.Redirection provoquant des exceptions ThreadAbort, mais cela ne semble pas être le problème fondamental - il me semble que le problème réel est le message "Object moved to here", qui provoque l'exception à être jetée.

Quelqu'un a une suggestion pour savoir pourquoi j'ai ça...?

EDIT: oublié de mentionner que je lance Firefox (3.5.7) avec IE Tab, donc était sur le point de mentionner que lorsque j'ai pensé que je ferais mieux de l'essayer dans IE, et voila - il fonctionne dans IE (7).

32
demandé sur gkrogers 2010-02-02 17:13:39

8 réponses

juste pour référence future une autre raison pour laquelle cela peut se produire est si vous faites quelque chose comme la réponse.Redirection (null) ou similaire. J'ai eu une situation où ma variable contenant l'URL était nul et c'est ce que j'ai.

25
répondu Dan Diplo 2012-06-19 15:44:38

ceci peut être causé en mettant le Response.Redirect() méthode try-catch bloc. La solution que j'ai trouvée était de mettre fin à la réponse presque en tirant la chasse d'un en-tête de redirection vers le client. prendre un coup d'oeil:

HttpResponse Response = HttpContext.Current.Response;
Response.StatusCode = 301; 
Response.StatusDescription = "Moved Permanently";
Response.RedirectLocation = "YourRedirectionUrlHere.aspx";
Response.Flush();
14
répondu Arash Milani 2012-05-02 12:03:17

je viens de tomber sur une affaire où c'est en train d'arriver. Il s'avère que nous avions un code qui a effectivement fait:

if (condition)
{
  Response.Redirect(page1);
}
Response.Redirect(page2);

évidemment la personne qui a écrit ceci (il y a bien longtemps heureusement) ne s'est pas rendu compte qu'une réponse.Redirect ne met pas, par défaut, fin au thread.

Je n'ai aucune idée de ce que les conséquences de faire cela sont, mais une trace fiddler de ce qui se passe semble montrer une redirection corrompue. Cela pourrait être une co-incidence, bien sûr, mais c'est le seul endroit que nous avons vu ce problème.

6
répondu Chris Simpson 2013-03-01 02:02:50

une autre raison pour laquelle cela pourrait se produire est que vous redirigez une page https vers une page http. Changer L'URL de redirection pour qu'elle soit aussi https:// a corrigé le problème pour moi.

3
répondu cometfish 2015-06-24 00:51:37

c'est Ce qui a fait le tour pour moi quand j'ai vu ce problème:

[Route("/something/{param}", "GET")]
public class MyRequestArg{
   public string param{get;set;}
}

public class MyRequestService
{
    public object Get(MyRequestArg request)
    {
    var url = "http://www.zombo.com";
    var myCookieString = "anything is possible!";

    var result = new HttpResult
                 {
                   StatusCode = HttpStatusCode.Redirect,
                   Headers = {
                              {HttpHeaders.Location, url},
                              {HttpHeaders.SetCookie, myCookieString}
                             }   
                 };
    return result;
    }
}
3
répondu Wes 2017-10-12 16:13:04

dans MVC, vous pourriez voir cela après un RedirectToRoute ().

Si vous utilisez un outil comme Fiddler, vous devriez voir un problème avec la réponse du serveur. J'ai remarqué un 500 Erreur.

Dans mon cas, cela a été causé par un objet ajouté à Session Non sérialisable.

1
répondu cat5dev 2013-08-01 22:23:17

utilisez l'élément d'ancrage avec runat=server

<a runat="server" ID="anchor1">anything can be here</a>

en code derrière:

if (!ispostback)
  anchor1.href="whateveryoulink";

lui Donner un essai.

Son travail mieux que la précédente Status Code=301 méthode.

0
répondu Kursat Turkay 2016-04-15 11:34:36

j'ai corrigé ce problème en mettant ma variable de chaîne globale en statique, parce que mon URL était réinitialisée à vide quand je redirigeais.

0
répondu DIZAD 2017-08-21 18:06:14