我正在对一组安全页面上的缓存问题进行故障排除,并且已经意识到需要针对所有响应修改标头.当我整理一个解决方案时,我想知道HttpContext.Current.Response和Page.Response之间的区别,以及何时应该在应用程序中使用每个对象.
谢谢.
为什么 HttpContext.Current.Request.Url.Host 返回的 URL 与 Web 浏览器中使用的 URL 不同?例如,在浏览器中输入“www.someurl.com”时,HttpContext.Current.Request.Url.Host 变量等于“www.someotherurl.com”。
我正在尝试为一个控制器编写单元测试,该控制器依赖于生活方式为"PerWebRequest"的类型.
Castle抛出以下异常:
System.InvalidOperationException:HttpContext.Current为null.PerWebRequestLifestyle只能在ASP.Net中使用.
我可以以某种方式模拟HttpContext.Current属性来解决这个问题吗?
我试图使用MVCContrib的TestControllerBuilder来初始化这个控制器,但它没有任何效果.
SymptomTopicController controller = new SymptomTopicController();
controller.WorkOrderFulfillment = workOrderFulfillment;
TestControllerBuilder controllerBuilder = new TestControllerBuilder();
controllerBuilder.InitializeController(controller);
Run Code Online (Sandbox Code Playgroud) 我正在对控制器进行单元测试。
在我的一种控制器方法中,我正在设置会话变量:
public void Index()
{ Session["foo"] = "bar";
return View();
}
Run Code Online (Sandbox Code Playgroud)
如何对此进行单元测试?问题是测试时Session属性为null。由于Session属性为只读,因此无法进行注入。
我不想使用任何第三方工具或嘲笑。
我正在尝试使用HttpContext.Current.User.Identity.Name从内部网络获取用户的Windows登录详细信息,但它是空的.
我已经尝试在Web.Config中更改身份验证模式,但没有任何乐趣:
<system.web>
<authentication mode="Windows" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
我还听说在项目属性中你应该启用Windows身份验证并禁用匿名身份验证,如下所示:

但后来我得到了一个重定向循环,在Chrome中显示"此网页有重定向循环"的消息.
我还检查过我的机器上安装了Windows身份验证:

有关如何解决此问题的任何想法吗?
非常感谢
我正在编写一个异常过滤器,将异常记录到 Elmah,所以我正在做这样的事情:
class ExceptionLoggingFilter : System.Web.Http.Filters.IExceptionFilter
{
public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actExecContext,
CancellationToken cancellationToken)
{
var httpContext = // what do I do here?
var errorSignal = ErrorSignal.FromContext(httpContext); // this is Elmah
errorSignal.Raise(actExecContext.Exception, httpContext);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道用什么来代替评论问题。我试图探索HttpActionExecutedContext从方法签名中获得的成员树,以找到通往 a 的方法System.Web.HttpContext,但我找不到任何到达那里的方法。
我如何在这里实现我的目标?
在 HttpContext(或类似的东西)中,我需要从控制器中添加一个临时变量,该变量需要在整个请求处理过程中可用(请求明智的变量)。但是 HttpContext.Current.Request 是只读的。如果我要添加项目,它就不会到外面去。我怎样才能做到这一点
感谢和问候 Binesh Nambiar C
我们正在使用 Web API 2,为了处理异常,我们通过继承 ExceptionFilterAttribute 创建了一个自定义属性。现在我们想将 JSON 请求的日志保存到数据库中以防万一。
我尝试使用 context.Request.Content.ReadAsStringAsync().Result 读取但它返回空字符串。
请帮忙!!
我需要在控制器外部的AspNet Core中获取HttpContext.在较旧的AspNet 4中,我可以使用HttpContext.Current来获取它,但它似乎在新的AspNet中被删除了.我发现的唯一解决方法是通过依赖注入解析IHttpContextAccessor并向它询问HttpContext,但是为了注入IHttpContextAccessor,我需要在应用程序启动中添加IHttpContextAccessor作为单例:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
Run Code Online (Sandbox Code Playgroud)
我研究过它,这是我找到的唯一方法.我谷歌它和IHttpContextAccessor被删除作为依赖解析器中的默认值,因为它是非常重的依赖.有没有其他方法来实现这一目标?
编辑: 我想知道如果不是将它作为Singleton添加到依赖项解析器,我可以在同一个地方使用HttpContextAccessor的实例将它保存在我自己的单例类中吗?
在 .net Framework <= 4.7.2 中,在验证上下文中,您可以HttpRequest通过访问HttpContext.
例如,我有一段代码如下所示:
public sealed class AccessValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext context)
{
// validate stuff, if all true -> yield ok.
// if is not valid
var request = HttpContext.Current.Request;
// store/log the request payload.
}
}
Run Code Online (Sandbox Code Playgroud)
使用 .net Core 2.1 时无法做到这一点。我看到了一个关于注入IHttpContextAccessor什么的帖子,但它几乎在每个地方都暴露了请求。
由于这是我服务器的外部库,我希望它不依赖于服务器代码注入,因为那样会产生我不想成为的依赖。
有没有已知的方法来处理这个或解决这个问题?
httpcontext ×10
asp.net ×4
asp.net-mvc ×4
asp.net-core ×2
c# ×2
.net-core ×1
caching ×1
hostname ×1
http-headers ×1
unit-testing ×1
validation ×1