Response.addHeader 导致 500(内部服务器错误)
Response.addHeader causes 500 (Internal Server Error)
我写了一个登录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(内部服务器错误)
谢谢
您的函数尝试做的事情太多了。它被称为 WebMethod
,return 是一个字符串,但您正试图在其中重定向。问题是在这种函数内部重定向没有意义。任何调用 Login
的东西都只知道 string
结果。可以说return类型的函数代表了客户端和服务器之间的"contract"。通过在函数内部重定向,您将违反此合同并执行客户端无法解释的意外操作,并且处理 WebRequest 的服务器基础架构无法处理。
执行此操作的正确方法是让您的 Login
函数坚持 "contract", 只是 return 结果。调用代码应该负责通过解析 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
}
我写了一个登录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(内部服务器错误) 谢谢
您的函数尝试做的事情太多了。它被称为 WebMethod
,return 是一个字符串,但您正试图在其中重定向。问题是在这种函数内部重定向没有意义。任何调用 Login
的东西都只知道 string
结果。可以说return类型的函数代表了客户端和服务器之间的"contract"。通过在函数内部重定向,您将违反此合同并执行客户端无法解释的意外操作,并且处理 WebRequest 的服务器基础架构无法处理。
执行此操作的正确方法是让您的 Login
函数坚持 "contract", 只是 return 结果。调用代码应该负责通过解析 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
}