Response.addHeader导致500(内部服务器错误)

时间:2015-12-14 14:05:21

标签: c# .net webmethod

我已经写了一个Login WebMethod,如果细节还可以,我想重定向到另一个页面。

这是我的代码:

[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 个答案:

答案 0 :(得分:1)

你的功能是试图做太多。它被称为WebMethod,它返回一个字符串,但你试图在其中重定向。问题是在这种功能中重定向是没有意义的。无论什么称为Login,只知道string结果。可以说函数的返回类型表示客户端和服务器之间的“契约”。通过重定向函数内部,您正在破坏此合约并执行客户端无法解释的意外事务,并且处理WebRequest的服务器基础结构无法处理。

执行此操作的正确方法是让Login功能坚持“合同”,只需返回结果。调用代码的责任应该是通过解析string结果并对其采取行动来解释该代码的结果。

要执行此操作,请从服务器调用中删除整个“if”块,并更改客户端上的代码以查找(某些)此类内容:

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