Получить System.Web.HttpResponse из класса, который не расширяет System.Web.UI.Page - PullRequest
0 голосов
/ 01 апреля 2012

Хотя название говорит обо всем, я хочу сообщить вам конкретный сценарий, где мне это нужно.

В приложении я хочу выйти из системы, вызвав метод 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 ]

2 голосов
/ 01 апреля 2012

Response.Redirect создаст 302 Http Response, который для браузера означает, что ему нужно будет перенаправить пользователя в это новое местоположение.

Поскольку теперь вызов сделан из javascript, JavaScript должен интерпретироватьответ и дать указание браузеру загрузить новое местоположение.

Сейчас я думаю, что проще всего использовать метод Logout () для возврата нового местоположения, а JavaScript установит свойство window.location

window.location = msg.d;

Из WebService вы можете получить доступ к ответу из класса HttpContext (HttpContext.Current.Response.Redirect()), но вам это не понадобится.На самом деле я не думаю, что веб-сервис должен писать другой ответ, чем обычный (SOAP и т. Д.).

2 голосов
/ 01 апреля 2012
HttpContext.Current.Response

Это статическое свойство.

...