我有一个网络服务,'AHandyWebService'在.aspx(。strongpx.cs中的不)内实现。
我正在尝试在调用Web服务时在客户端上设置cookie。
我不确定这是否只是本质上不可能,或者它是否与我完成它的方式有关。
因为实现w-s的方法是静态的,所以我必须实现一个'page'的本地实例,我不确定它是否应该如此。
方法如下:
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public static SomeObj AHandyWebService()
{
SomeObj mySomeObj;
try
{
mySomeObj = getSomeObj();
System.Web.UI.Page p = new Page();
HttpCookie appCookie = new HttpCookie("FOOAPP");
appCookie.Value = String.Format("Written: {0:yyyy-MM-dd}", System.DateTime.Now.ToUniversalTime());
appCookie.Expires = System.DateTime.Now.ToUniversalTime().AddMinutes(1);
appCookie.Path = "/FOO";
p.Response.Cookies.Add(appCookie);
}
catch (Exception ex)
{
throw;
}
return mySomeObj;
}
顺便说一下,这里没有跨域问题 - w-s是从与w-s消费页面相同的域提供的。
欢迎提出建议/意见。
答案 0 :(得分:0)
与此同时,在其他新闻中,我遇到了这个StackOverflow question,它为我提供了一种更安全的方法,可以从静态方法中访问Response对象,因此我已经实现了它,现在它可以正常运行
如果它有用,这里是现在工作方法的副本:
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public static SomeObj AHandyWebService()
{
SomeObj mySomeObj;
try
{
mySomeObj = getSomeObj();
HttpCookie appCookie = new HttpCookie("FOOAPP");
appCookie.Value = String.Format("Written: {0:yyyy-MM-dd}", System.DateTime.Now.ToUniversalTime());
appCookie.Expires = System.DateTime.Now.ToUniversalTime().AddMinutes(1);
appCookie.Path = HttpContext.Current.Request.ApplicationPath;
HttpContext.Current.Response.Cookies.Add(appCookie);
}
catch (Exception ex)
{
throw;
}
return mySomeObj;
}