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

本文关键字:服务器 错误 内部 addHeader 导致 Response | 更新日期: 2023-09-27 18:26:53

我已经写了一个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(内部服务器错误)感谢

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

您的函数试图做的太多了。它被调用为返回字符串的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
}