标签: httpcontext

以编程方式刷新/更新HttpContext.User

我正在使用FormsAuthentication用于ASP.NET站点,该站点具有显示当前登录用户的主页,Page.User.Identity.Name.

他们可以在他们的设置中更改他们的用户名,当这样做时,我会为他们更新他们的cookie,这样他们就不必签回/用回发签到.

FormsAuthentication.SignOut();
FormsAuthentication.SetAuthCookie(username, false);
Run Code Online (Sandbox Code Playgroud)

我可能非常挑剔,但在他们更改用户名后,母版页仍会显示其原始用户名,直到他们重新加载或加载不同的页面.

有没有办法以编程方式更新当前的Page.User,以便在同一回发期间显示他们的新用户名?

asp.net forms-authentication httpcontext

4
推荐指数
1
解决办法
6503
查看次数

ASP.NET MVC:如何使用HttpContext.User

我真的迷失了如何使用HttpContext.User.我到处都读到了FormAutherication的优点,但我不知道它是如何工作的.如果我做这样的事情:

ControllerContext.HttpContext.User = new GenericPrincipal(GetUser(username, password), roles);
Run Code Online (Sandbox Code Playgroud)

ControllerContext.HttpContext.User包含什么?以及如何通过这种方式访问​​用户信息?

我认为我有这样的行动:

public User GetUser(string username, string password)
    {
        try
        {
            var user = (from u in dm.Users
                        join r in dm.Roles
                        on u.Role_ID_FK equals r.RoleID
                        where u.Username.Equals(username) && u.Password.Equals(password)
                        select u).Single();

            return user;
        }
        catch (Exception e)
        {
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后如果我想在我的视图中使用用户信息,比如用户名或角色,我可以在我的视图中调用ControllerContext.HttpContext.User.Username.但这看起来是错误的方式.

那么你们可以给我一个方向,或者发布一个链接到一个可以的网站吗?

asp.net-mvc httpcontext

4
推荐指数
1
解决办法
2万
查看次数

缺少HttpContext

我有一个项目作为参考添加到System.Web.

但是,它似乎无法拿起HttpContext.这样做:

Imports System.Web
_ApplicationBase = HttpContext.Current()
Run Code Online (Sandbox Code Playgroud)

告诉我没有声明HttpContext.如果你看一下System.Web里面的方法和属性几乎没有任何显示:只有AspHostingPermission,AspHostingPermissionAttribute,AspHostingPermissionLevel和Services.

引用有效并指向正确的位置.这让我发疯了 - 我错过了什么?

干杯,马特

.net httpcontext

4
推荐指数
2
解决办法
4472
查看次数

MVC属性中的HttpContext - 线程问题?

我的NHibernate会话管理设置如下:

    protected MvcApplication()
    {
        BeginRequest += delegate
                            {
                                NHibernateSessionManager.Instance.OpenSession();
                             };
        EndRequest += delegate
                            {

                                NHibernateSessionManager.Instance.CloseSession();
                            };
    }
Run Code Online (Sandbox Code Playgroud)

当我需要保存到数据库时,我创建了一个如下所示的ActionFilterAttribute:

public class TransactionAttribute:ActionFilterAttribute {private ITransaction _currentTransaction;

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        _currentTransaction = NHibernateSessionManager.Instance.CurrentSession.Transaction;
        _currentTransaction.Begin();
    }


    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (_currentTransaction.IsActive)
        {
            if (filterContext.Exception == null)
                _currentTransaction.Commit();
            else
            {
                _currentTransaction.Rollback();
            }
        }
        _currentTransaction.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以将[Transaction]添加到我的action方法中.这似乎适用于初始测试,但我尝试在HttpWebRequest使用多次从另一个应用程序调用一个动作方法,我遇到了问题.使用Fiddler进行测试我设置了一个POST请求,然后快速连续关闭它们,它显示以下内容: WebRequests

红色是我认为与线程有关的各种错误.

我的NHibernateSessionManager使用HTtpContext来存储会话,如下所示:

    public ISession CurrentSession
    {
        get { return (ISession)HttpContext.Current.Items["current.session"]; }
        set { HttpContext.Current.Items["current.session"] = value; }
    }
Run Code Online (Sandbox Code Playgroud)

因此,为了修复它,我将我的事务代码移动到我的BeginRequest和EndRequest方法中 - 然后我可以连续启动堆.

我的问题是 …

nhibernate asp.net-mvc httpcontext

4
推荐指数
1
解决办法
1136
查看次数

HttpContext如何在.NET中运行

我试图了解httpcontext如何在.NET中工作的细节?

我无法理解的是HttpContext类有一个静态HttpContext对象的字段.那么对于来自客户端的每个请求是否创建了httpcontext的实例?为什么定义为静态?这是否意味着一个应用程序只能有一个httpcontext?

我很困惑所以问问题的方式可能有点复杂.我希望这是可以理解的.

提前致谢,

.net asp.net httprequest httpcontext

4
推荐指数
1
解决办法
664
查看次数

HttpContext.Current如何处理IIS管道中的每个请求?

如您所知,HttpContext.Current返回应用程序管道中的当前上下文.
此属性也是static,因此逻辑上对该属性或其属性的任何更改都应该影响其他管道.

静态字段确切地标识一个存储位置.无论创建了多少个类实例,都只有一个静态字段的副本. 更多

IIS如何处理这个以防止其他管道上的冲突,并且HttpContext.Current每个管道上的每个管道都是唯一的?

例如,对于已登录系统的两个用户,将HttpContext.Current.User.Identity.Name给出将请求发送到服务器的用户的用户名.

ASP.NET管道:
在此输入图像描述

c# asp.net pipeline httpcontext

4
推荐指数
1
解决办法
1737
查看次数

ASP.NET CORE版本中的HttpContext.Current.Request.Form.AllKeys

foreach (string key in HttpContext.Current.Request.Form.AllKeys)
{
   string value = HttpContext.Current.Request.Form[key];
}
Run Code Online (Sandbox Code Playgroud)

什么是上述代码的.net核心版本?好像.net核心取出AllKeys并用Keys代替它.我试图将上面的代码转换为.net核心方式,但它抛出了无效的操作异常.

HttpContext.Request.Form ='HttpContext.Request.Form'抛出类型'System.InvalidOperationException'的异常

转换代码:

foreach (string key in HttpContext.Request.Form.Keys)
{      
}
Run Code Online (Sandbox Code Playgroud)

c# invalidoperationexception httpcontext asp.net-core

4
推荐指数
1
解决办法
5007
查看次数

如何从HttpContext获取ASP.NET Core MVC筛选器

我正在尝试编写一些中间件,并且需要知道当前的操作方法(如果有)是否具有特定的过滤器属性,因此我可以根据其存在来更改行为。

因此,是否有可能IList<IFilterMetadata>像在ResourceExecutingContext实现a时所做的那样获取类型的过滤器集合IResourceFilter

c# httpcontext asp.net-core-mvc asp.net-core asp.net-core-middleware

4
推荐指数
2
解决办法
1442
查看次数

C#DotNet核心中间件包裹响应

我有一个简单的控制器动作,看起来像:

    public Task<IEnumerable<Data>> GetData()
    {
        IEnumerable<Data> data = new List<Data>();
        return data;
    }
Run Code Online (Sandbox Code Playgroud)

我希望能够从中间件中检查返回值,以便JSON看起来像

{
  "data": [
  ],
  "apiVersion": "1.2",
  "otherInfoHere": "here"
}
Run Code Online (Sandbox Code Playgroud)

所以我的有效载荷总是在data.我知道我可以在控制器级别执行此操作,但我不想在每个操作上执行此操作.我宁愿一次性在中间件中做到这一点.

这是我的中间件的一个例子:

public class NormalResponseWrapper
{
    private readonly RequestDelegate next;

    public NormalResponseWrapper(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {                
        var obj = context;
        // DO something to get return value from obj
        // Create payload and set data to return value

        await context.Response.WriteAsync(/*RETURN NEW PAYLOAD HERE*/);
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

现在有了价值,但要归还它是迟到的

        try …
Run Code Online (Sandbox Code Playgroud)

c# middleware httpcontext .net-core

4
推荐指数
2
解决办法
1817
查看次数

如何在.net核心中获取HttpRequest主体?

我想在.net核心中获取Http Request主体,我使用了以下代码:

using (var reader
    = new StreamReader(req.Body, Encoding.UTF8))
{
    bodyStr = reader.ReadToEnd();
}
req.Body.Position = 0
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误:

System.ObjectDisposedException:无法访问已处置的对象。对象名称:“ FileBufferingReadStream”。

该行的using语句后发生错误

如何在.net核心中获取HttpRequest主体?以及如何解决此错误?

c# httpcontext streamreader asp.net-core

4
推荐指数
1
解决办法
1577
查看次数