从不扩展System.Web.UI.Page的类获取System.Web.HttpResponse

时间:2012-04-01 12:33:23

标签: c# asp.net authentication response webmethod

虽然标题说明了一切,但我想让你知道我需要的特殊情况。

在应用程序中,我想通过调用JavaScript方法注销用户。这个方法依次调用WebMethod:

namespace EMSApplication.Web.WebServices {
    /// <summary>
    /// Holds the Webservice methods of EMSApplication
    /// </summary>
    [WebService(Namespace = "http://ems-app.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class EMSWebService : System.Web.Services.WebService {   

        [WebMethod]
        public string Logout() {
        if (User.Identity.IsAuthenticated) {
            System.Diagnostics.Debug.WriteLine(" ==JYM00000000000000000000000000000");
            FormsAuthentication.SignOut();
            Response.Redirect("~/default.aspx");
        }
        return "";
        }
    }
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

HttpContext.Current.Response

这是一个静态属性。

答案 1 :(得分:2)

Response.Redirect将创建一个302 Http Response,对于浏览器意味着它需要将用户重定向到该新位置。

由于现在通过javascript调用,JavaScript需要解释响应并指示浏览器加载新位置。

我现在想的最简单的方法是返回新位置的Logout()方法,JavaScript将设置window.location属性

window.location = msg.d;

从WebService,您可以从HttpContext类(HttpContext.Current.Response.Redirect())访问Response,但您不需要它。实际上我不认为web服务应该写出比通常的更多的响应(SOAP等)。