- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个 .asmx Web 服务想要升级到 WebAPI。这些网络服务看起来有点像这样:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class TheWebService : System.Web.Services.WebService {
[WebMethod(EnableSession = true)]
public string SomeMethod(string SomeInput)
{
MySessionModel TheSession = HttpContext.Current.Session["UserSession"] as MySessionModel;
return SomeClass.SomeMethod(SomeInput, TheSession);
}
}
基本上,我有一个单页应用程序。我使用 Forms Auth 登录并将用户重定向到他们的“个人资料”,然后,从该页面,应用程序使用 Web 服务与服务器进行通信。 Web 服务仅返回原始字符串,因此我不需要在 Web 服务级别进行序列化。目前,该应用程序托管在 IIS 中,很快我将把它部署到 azure 中。
我在网上浏览了一下,有几篇文章表明使用 session 状态和 HttpContext 是糟糕的设计。为什么在这种情况下使用 HttpCurrent 和 session 状态是一个坏主意?
最佳答案
使用 ASP.NET Session 并没有什么本质上的错误,只要您不将其用作任何旧数据的包罗万象的篮子即可。例如,购物车不属于 session :它们属于购物车持久性组件。
另外,我怀疑这个问题上的 Azure 标签的原因,如果您在负载平衡的环境(例如 Azure 云服务)中运行,则需要使用外部 session 提供程序(例如 SQL 数据库或共享缓存。当用户在具有不同 session 副本的不同服务器之间切换时,使用进程内 session 提供程序(默认)将导致非常奇怪、通常无法重现的错误。
对于 HttpContext.Current,对于 Web API,控制反转、依赖注入(inject)和简单的可测试性等都很重要。该服务的干净、可测试的 Web API 版本可能如下所示:
public class TheWebService : ApiController {
private readonly IUserSession _userSession;
public TheWebService(IUserSession userSession)
{
_userSession = userSession;
}
public string SomeMethod(string SomeInput)
{
MySessionModel TheSession = _userSession.Get();
return SomeClass.SomeMethod(SomeInput, TheSession);
}
}
public interface IUserSession
{
MySessionModel Get();
}
您仍然可以在这样的类中使用 HttpContext.Current.Session["UserSession"]
:
public class CurrentContextUserSession : IUserSession
{
public MySessionModel Get()
{
return HttpContext.Current.Session["UserSession"] as MySessionModel;
}
}
然后,您可以使用 Unity 或 Ninject 等 IoC 容器将 CurrentContextUserSession
设置为 IUserSession
的实现,以便 Web API 在构造 TheWebService 实例时使用
。但是,当您编写测试时,您可以使用 IUserSession 的模拟或 stub 实现,它不依赖于 HttpContext.Current
。
关于asp.net - 为什么在 WebAPI 中访问 session 状态和 HttpContext 被认为是糟糕的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262633/
我想在这里说的是我在从之前离开的相同状态重新启动我的应用程序时遇到的问题。我在这方面做了很多研发,并且已经解决了 stackoverflow 中发布的问题。所以请不要说它是重复的。 我试过设置这些选项
当我在我的类中实现 __cmp__ 函数时,python 是否会在内部重载“==”,我们在 C++ 中是如何做到的? 只是好奇。我是 python 的新手。 :) 最佳答案 ==的含义当您定义 __c
我在 Raspberry Pi2 上安装了 Gitlab,几个月来它运行良好。但自从关闭了RPi的电源后,它就不再起作用了。网页返回502错误。 502 Whoops, GitLab is takin
有人知道用户登陆带有Webfonts的页面时为什么Google Chrome浏览器崩溃吗 它并不会一直发生,而是经常发生 我刚得到一个蓝屏页面,却不知道为什么:该页面不是来自重定向时就很好了。 这是我
当我登录时,Skype始终会给出此错误。 糟糕,Skype存在问题。尝试注销然后重新登录。 STARTUP_LOAD_ERROR MACBOOK 最佳答案 Macbook 用户 退出Skype 回家
我正在尝试从 flutter 开始,首先我在 cmd 上运行 flutter doctor 它有效。在我安装了 ANDROID SDK 之后,同样的命令 flutter doctor 给了我异常:
从 android studio 终端运行 flutter attach 不工作。显示错误flutter 意外退出。 终端输出: flutter attach Checking for adverti
当使用 TinyMCE 4 测试所有浏览器时,Chrome 非常慢。 (我尝试从 TinyMCE 中删除所有插件,但没有任何区别。) Chrome 需要大约 20-25 秒在 TinyMCE 中呈现一
我试图让下面的脚本工作,以便从远程服务器(服务器 1)读取特定目录中的 CSV 文件列表,并将数据移植到另一台服务器的 PostgreSQL 数据库中。 我已经创建了一个 rsa SSH key 并将
在嵌入式 linux 环境中(在 PowerPC 上定制的 2.4.25)几个小时后我得到以下内核 panic : Oops: kernel access of bad area, sig: 11 N
在将现有 Node.js (Hapi.js) + RethinkDB 从 OVH VPS(最小 vps)迁移到 AWS Lambda( Node )+ DynamoDB 的过程中,我最近遇到了一个非常
我是一名优秀的程序员,十分优秀!