如此以来,System.Web和HttpContext是不是在Silverlight中可用,有没有办法做到HtmlDecode与HtmlEncode一个Silverlight应用程序里面没有一些可怕的正则表达式?
目前我有一个ActionFilter,它从HttpContext获取当前用户名,并将其传递给在服务方法上使用它的操作.例如:
Service.DoSomething(userName);
Run Code Online (Sandbox Code Playgroud)
我现在有理由不在动作级别而是在控制器构造级别执行此操作.目前我正在使用结构图来创建控制器并注入服务.我正在寻找类似的东西:
public interface IUserProvider
{
string UserName { get; }
}
public class HttpContextUserProvider : IUserProvider
{
private HttpContext context;
public HttpContextUserProvider(HttpContext context)
{
this.context = context;
}
public string UserName
{
get
{
return context.User.Identity.Name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,我的IoC foo非常弱,因为这是我用过的第一个项目.
所以我的问题是......如何告诉结构图在HttpContextUserProvider的构造函数中传递HttpContext?这看起来很奇怪......我不知道怎么想HttpContext.
我有一个WCF服务方法,它在我从另一个方法旋转的工作线程中运行.
我需要将相对服务应用程序路径("〜/ Templates/a.template")映射到物理路径("D:\ Web\Templates\a.template"),但我无法使用HttpContext.Current.Server.MapPath因为HttpContext.Current在工人线程.我怎么能达到MapPath方法?
谢谢!安德烈
使用当前请求,我可以获取URL主机名:
HttpContext.Current.Request.Url.Host
Run Code Online (Sandbox Code Playgroud)
但是 - 我需要在不使用当前请求(HttpContext.Current)的情况下确定URL主机名.这样做的原因是我的代码是SqlDependency在onChange回调中从a 中调用的,当时发现了SQL依赖关系.虽然代码驻留在我的Web应用程序中,但没有请求,并且HttpContext.Current为null.
我希望我可以抓住它HttpRuntime,但似乎没有什么用处.有没有办法可以获得这些信息?
我终于能够HttpContext.Current通过在线查找一些代码来获得不为空.但我仍然无法在单元测试中向请求添加自定义标头.这是我的测试:
[TestClass]
public class TagControllerTest
{
private static Mock<IGenericService<Tag>> Service { get; set; }
private TagController controller;
[TestInitialize]
public void ThingServiceTestSetUp()
{
Tag tag = new Tag(1, "people");
Response<Tag> response = new Response<Tag>();
response.PayLoad = new List<Tag>() { tag };
Service = new Mock<IGenericService<Tag>>(MockBehavior.Default);
Service.Setup(s => s.FindAll("username", "password", "token")).Returns(response);
controller = new TagController(Service.Object);
HttpContext.Current = FakeHttpContext();
}
public static HttpContext FakeHttpContext()
{
var httpRequest = new HttpRequest("", "http://kindermusik/", "");
var stringWriter = new StringWriter();
var httpResponce = new …Run Code Online (Sandbox Code Playgroud) c# unit-testing httprequest httpcontext asp.net-apicontroller
在我的asp.net mvc应用程序中,我使用Ninject作为DI框架.
我的控制器使用我的HttpAccountService从cookie获取信息.为此,我需要HttpAccountService中的HttpContext.Current.由于这是一个依赖项,我通过构造函数注入它:
kernel.Bind<IAccountService>()
.To<HttpAccountService>()
.InRequestScope()
.WithConstructorArgument("context", HttpContext.Current);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这总是绑定到相同的上下文,这使得在第一个请求完成后,这个上下文变得过时了.
我应该如何正确地注入我的HttpContext?
我想为Web服务编写单元测试.我创建我的测试项目,引用我的web项目(不是服务引用,程序集引用),然后编写一些代码来测试Web服务 - 它们工作正常.但是,有一些服务可确保用户使用登录Web应用程序HttpContext.Current.User.Identity.IsAuthenticated.
在测试的上下文中,没有HttpContext这样的东西,所以测试总是失败.这些Web服务应该如何进行单元测试?
我有很多依赖于HttpContext.Current的代码,我注意到来自SignalR集线器的请求有HttpContext.Current == null,所以我的代码断了,例如:
HttpContext.Current.Request.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)
所以我想出了以下内容:
public static class UnifiedHttpContext
{
private static HubCallerContext SignalRContext { get; set; }
private static int SignalRUserId
{
get { return WebSecurity.GetUserId(SignalRContext.User.Identity.Name); }
}
private static bool IsSignalRRequest
{
get { return SignalRContext != null; }
}
public static void SetSignalRContext(HubCallerContext context)
{
SignalRContext = context;
}
public static bool IsAuthenticated
{
get
{
if (!IsSignalRRequest)
{
return System.Web.HttpContext.Current.Request.IsAuthenticated;
}
else
{
return SignalRContext.User.Identity.IsAuthenticated;
}
}
}
public static int UserId
{
get …Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的行为试图获取存储在HttpContext.Current.Session的布尔属性的值.
该对象是一个布尔值.首先,我试图检查对象是否存在,如果存在,则使用它.
我试图在?:运算符中使用它,但它表现得很奇怪.这是我的Watch窗口:

"ExistingKey"键存在并且具有值为false(如果键不存在返回false).!=null它是否返回false(第一件事很奇怪).?:运算符时,除了条件为假之外,它还返回第一个表达式4(第二个奇怪的东西).有人能解释一下这种行为吗?
注意:我不是要求绕过这种情况的替代方案.只是问为什么这样的工作原理.
我有一个在ASP.NET MVC应用程序中使用的以下代码示例.此代码的目的是为排队一些长时间运行的操作创建"即发即弃"请求.
public JsonResult SomeAction() {
HttpContext ctx = HttpContext.Current;
Task.Run(() => {
HttpContext.Current = ctx;
//Other long running code here.
});
return Json("{ 'status': 'Work Queued' }");
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是在异步代码中处理HttpContext.Current的好方法,但是目前我们的实现不允许我们做其他事情.我想了解这段代码有多危险......
问题:理论上可以在Task.Run中设置HttpContext,将上下文设置为另一个请求吗?
我想是的,但我不确定.我是如何理解的:Request1是从线程池中的Thread1处理的,然后当Thread1绝对处理另一个请求(Request2)时,Task.Run中的代码将设置从Request1到Request2的上下文.
也许我错了,但我对ASP.NET内部的了解不允许我正确地理解它.
谢谢!
httpcontext ×10
asp.net ×5
c# ×4
asp.net-mvc ×3
unit-testing ×2
asynchronous ×1
html-encode ×1
httprequest ×1
ninject ×1
session ×1
signalr ×1
silverlight ×1
string ×1
structuremap ×1
threadpool ×1
wcf ×1