在我的基本控制器的构造函数中,我调用一个扩展方法来检查客户端上的特定cookie.
目前我正在使用System.Web.HttpContext.Current来获取当前上下文.
但是,我认为我应该使用Controller.HttpContext,因为它更可测试并包含有关请求的其他信息.
但是,Controller.HttpContext在创建时返回null(相信这是设计),而且还在Initialize和Execute方法上返回null(除非我使用Routing.RequestContext.HttpContext?).
所以,如果我应该使用Controller.HttpContext而不是HttpContext.Current,请求在什么时候可以使用它?
谢谢Ben
我发现这个伟大的小HttpModule加密和解密所有的查询字符串.它可以在这里找到:HttpModule用于查询字符串加密
有一个主要的缺陷,我真的可以使用一些如何解决的输入.在页面的回发中,跳过HttpMethod POST并且QueryString被解密显示.显然这是一个重大的安全风险.
void context_BeginRequest(object sender, EventArgs e)
{
try
{
HttpContext context = HttpContext.Current;
if (context.Request.Url.OriginalString.Contains("aspx") && context.Request.RawUrl.Contains("?"))
{
string query = ExtractQuery(context.Request.RawUrl);
string path = GetVirtualPath();
if (query.StartsWith(PARAMETER_NAME, StringComparison.OrdinalIgnoreCase))
{
// Decrypts the query string and rewrites the path.
string rawQuery = query.Replace(PARAMETER_NAME, string.Empty);
string decryptedQuery = Decrypt(rawQuery);
context.RewritePath(path, string.Empty, decryptedQuery);
}
else if (context.Request.HttpMethod == "GET")
{
// Encrypt the query string and redirects to the encrypted URL.
// Remove if you don't want all query …Run Code Online (Sandbox Code Playgroud) 使用带有cookie的AndroidHttpClient给我混合200 ok和403禁止响应.我不确定我做错了什么.
我以下列方式使用AndroidHttpClient:
我有几个后台线程类,每个类都执行以下操作:
HttpGet get...
HttpClient client = AndroidHttpClient.newInstance("Android");
HttpContext http_context = HttpSupport.getHttpContextInstance();
CookieStore cookie_store = HttpSupport.getCookieStoreInstance();
http_context.setAttribute(ClientContext.COOKIE_STORE, cookie_store);
client.execute(
Run Code Online (Sandbox Code Playgroud)
HttpSupport是一个包含两个静态字段的类; 一个CookieStore和一个HttpContext:
public class HttpSupport {
private static HttpContext _context;
private static CookieStore _cookieStore;
public static synchronized HttpContext getHttpContextInstance() {
if (_context == null) {
_context = new BasicHttpContext();
}
return _context;
}
public static synchronized CookieStore getCookieStoreInstance() {
if (_cookieStore == null) {
_cookieStore = new BasicCookieStore();
}
return _cookieStore;
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序中有多个AndroidHttpClient实例可以吗?我是否正确存储了cookie?
我在尝试解决需要非控制器中的一些标头的问题时发现了这篇文章。
我对这种方法持怀疑态度,作者没有回应。我主要关心的是使用 global static 的方法HttpContext。我在想它不应该处理两个请求。这种情况的一个例子如下(连同我提到的文章中介绍的方法):
public static class AppContext
{
public static IHttpContextAccessor HttpContextAccessor { get; set; }
public static void Configure(IHttpContextAccessor accessor)
{
HttpContextAccessor = accessor;
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
IHttpContextAccessor contextAccessor)
{
AppContext.Configure(contextAccessor);
...
}
[Route("api/[controller]")]
[ApiController]
public class ExampleController : ControllerBase
{
[HttpGet("{number}")]
public IActionResult Example(int number)
{
if (number == 1)
{
Thread.Sleep(10000);
}
var result = AppContext.HttpContextAccessor.HttpContext.Request.GetDisplayUrl();
return Ok(result + " " + number);
} …Run Code Online (Sandbox Code Playgroud) 我有一个异步方法,它使用 HttpContext.Current,它由另一个在后台运行的代码使用,例如
var result = Task.Run(async () => await SomeMethod()).Result;
Run Code Online (Sandbox Code Playgroud)
HttpContext.Current 始终为 null。有没有办法将 HttpContext 传递给后台任务?
httpcontext ×5
c# ×3
android ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
async-await ×1
cookies ×1
httpclient ×1
httpmodule ×1