2015-12-14 4 views
0

Я написал Login WebMethod, если подробности в порядке, я хочу перенаправить на другую страницу.Response.addHeader вызывает 500 (Внутренняя ошибка сервера)

это мой код:

[WebMethod] 
public String Login(String email, String password){ 

    String result=WSUtils.GetData("check_login", email, password); 
    if (result.Equals("True")){ 

      Context.Response.Clear(); 
      Context.Response.Status = ""+System.Net.HttpStatusCode.Redirect; 
      Context.Response.AddHeader("Location", "/admin/index.html"); 
      Context.Response.TrySkipIisCustomErrors = true; 
      Context.Response.End(); 

    } 
return result; 
} 

этот код вызывает 500 (Внутренняя ошибка сервера) спасибо

+1

Есть ли какая-то особая причина не используя 'Response.Redirect'? –

+0

Внимательно изучая ваш код, я должен задать вопрос, что вы пытаетесь выполнить здесь. Этот код находится внутри 'WebMethod', который возвращает строку. Все, что вызывает этот метод, ожидает, что строка 'string' будет возвращена непосредственно. Перенаправление в середине этого метода похоже на то, что он нарушит логику того, что это называется. –

+0

Response.redirect не работает. Как правильно выбрать перенаправление? –

ответ

1

Ваша функция пытается сделать слишком много. Он вызывается как WebMethod, который возвращает строку, но вы пытаетесь перенаправить ее внутри. Проблема в том, что перенаправление внутри такого рода функций не имеет смысла. Все, что называется Login, знает только о результатах string. Можно сказать, что возвращаемый тип функции представляет собой «контракт» между клиентом и сервером. Перенаправляя внутри функции, вы нарушаете этот контракт и делаете что-то неожиданное, что клиент не может интерпретировать, а инфраструктура сервера, которая обрабатывает WebRequest, не может справиться.

Правильный способ сделать это, чтобы ваша функция Login придерживалась «контракта», только вернул результат. Ответственный код должен интерпретировать результат этого кода, анализируя результат string и предпринимая действия по нему.

Чтобы сделать это, удалить все «если» блока от вашего вызова сервера, и изменить код на клиенте искать (что-то), как это:

if (myWebServiceClient.Login(email, password) == "True") 
{ 
    //I logged in, do success stuff here 
} 
else 
{ 
    //Display some kind of login failed message 
    //Redirect here 
} 

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

  • Нет связанных вопросов^_^