小编Raz*_*zie的帖子

ASP.NET MVC - 设置自定义IIdentity或IPrincipal

我需要做一些相当简单的事情:在我的ASP.NET MVC应用程序中,我想设置一个自定义IIdentity/IPrincipal.哪个更容易/更合适.我想要扩展默认值,以便我可以调用类似User.Identity.IdUser.Identity.Role.没什么特别的,只是一些额外的属性.

我已经阅读了大量的文章和问题,但我觉得我做得比实际更难.我觉得这很容易.如果用户登录,我想设置自定义IIdentity.所以我想,我将Application_PostAuthenticateRequest在我的global.asax中实现.但是,每次请求都会调用它,并且我不希望在每个请求上调用数据库,这些请求将从数据库请求所有数据并放入自定义IPrincipal对象.这似乎也是非常不必要,缓慢,并且在错误的地方(在那里进行数据库调用)但我可能是错的.或者数据来自何处?

所以我想,每当用户登录时,我都可以在我的会话中添加一些必要的变量,我将其添加到Application_PostAuthenticateRequest事件处理程序中的自定义IIdentity中.但是,我Context.Sessionnull那里,所以这也不是要走的路.

我已经在这一天工作了一天,我觉得我错过了什么.这不应该太难,对吧?我也对此附带的所有(半)相关内容感到困惑.MembershipProvider,MembershipUser,RoleProvider,ProfileProvider,IPrincipal,IIdentity,FormsAuthentication....我是唯一一个谁发现这一切非常混乱?

如果有人能告诉我一个简单,优雅,高效的解决方案,可以在IIdentity上存储一些额外的数据而不需要额外的模糊...这将是非常棒的!我知道在SO上有类似的问题,但如果我需要的答案就在那里,我一定会忽略.

asp.net asp.net-mvc forms-authentication iprincipal iidentity

638
推荐指数
5
解决办法
21万
查看次数

Asp.Net Core MVC中的Request.IsAjaxRequest()在哪里?

要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在尝试使用新发布的Visual Studio 2015 CTP-6构建Web应用程序.

大多数事情看起来很有希望,但我似乎无法找到Request.IsAjaxRequest() - 我在旧的MVC项目中经常使用的功能.

有没有更好的方法来做到这一点 - 这使他们删除了这个方法 - 还是"隐藏"在其他地方?

感谢您在何​​处找到它或做什么的建议!

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

56
推荐指数
3
解决办法
3万
查看次数

如何从HierarchicalDataTemplate项中获取TreeViewItem?

我有一个TreeView使用a HierarchicalDataTemplate绑定其数据.

它看起来像这样:

<TreeView x:Name="mainTreeList" ItemsSource="{Binding MyCollection}>
  <TreeView.Resources>
    <HierarchicalDataTemplate 
     DataType="{x:Type local:MyTreeViewItemViewModel}" 
     ItemsSource="{Binding Children}">
      <!-- code code code -->
    </HierarchicalDataTemplate>
  </TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)

现在,从主窗口的代码隐藏,我想得到当前选择TreeViewItem.但是,如果我使用:

this.mainTreeList.SelectedItem;
Run Code Online (Sandbox Code Playgroud)

selectedItem属于类型MyTreeViewItemViewModel.但我想得到'父母'或'约束' TreeViewItem.我没有把它传递给我的TreeViewItemModel对象(甚至不知道如何).

我怎样才能做到这一点?

wpf treeview hierarchicaldatatemplate

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

ASP.NET MVC - 为基本控制器中的母版页设置ViewData

我在ASP.NET MVC项目中使用了一个母版页.该母版页需要一些ViewData,它会在每个页面上显示.

如果我没有在我的控制器中设置此ViewData键,则会收到无法找到它的错误.但是,我不想在每个控制器中设置ViewData(我不想ViewData["foo"] = GetFoo();在每个控制器中说).

所以,我正在考虑在基本控制器中设置它,并让每个控制器继承自这个基本控制器.在基本控制器默认构造函数中,我设置了ViewData.我在这里找到了类似的方法:http://www.asp.net/learn/MVC/tutorial-13-cs.aspx.到目前为止一切都很好,这可行...但问题是这些数据来自某个地方的数据库.

现在,当我想对我的控制器进行单元测试时,从基本控制器继承的控制器调用它的默认构造函数.在默认构造函数中,我初始化我的存储库类以从数据库中获取此数据.结果:我的单元测试失败,因为它无法访问数据(我当然不希望他们访问这些数据).

我也不想将正确的Repository(或DataContext,无论你怎么命名)类传递给每个控制器,而控制器又将它传递给默认控制器,我可以用我的单元测试来模拟它.控制器又依赖于其他存储库类,我最终会将多个参数传递给构造函数.为我的感觉工作太多,或者我错了?还有其他解决方案吗?

我已经尝试过使用StructureMap,但最后我觉得这不会解决我的问题,因为每个控制器仍然需要调用基础构造函数来初始化存储库类,所以我不能模拟它.

是一个类似的问题,但我发现没有给出令人满意的答案.我能否以一种简洁的方式解决这个问题,也许使用StructureMap作为解决方案?或者我应该把它吸干并将存储库传递给每个控制器并再次传递给基本控制器?再一次,对于如此简单的事情感觉就像这么多工作.谢谢!

asp.net-mvc controller master-pages

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

具有泛型返回类型的可空引用类型

我正在使用新的C#8可空引用类型功能,并在重构我的代码时,我遇到了这个(简化)方法:

public T Get<T>(string key)
{
    var wrapper = cacheService.Get(key);
    return wrapper.HasValue ? Deserialize<T>(wrapper) : default;
}
Run Code Online (Sandbox Code Playgroud)

现在,这给出了一个Possible null reference return逻辑上的警告,因为default(T)将为所有引用类型赋予null.起初我以为我会把它改成以下内容:

public T? Get<T>(string key)

但这不可能做到.它说我要么必须添加通用约束where T : classwhere T : struct.但是,这是不是一种选择,因为这既可以是(我可以存储intint?或实例FooBar在缓存或其他).我还读到了一个假定的新泛型约束,where class?但似乎没有用.

我能想到的唯一简单的解决方案是使用null forgiving运算符更改return语句:

return wrapper.HasValue ? Deserialize<T>(wrapper) : default!;
Run Code Online (Sandbox Code Playgroud)

但这感觉不对,因为它肯定是空的,所以我基本上对这里的编译器撒谎:-)

我怎样才能解决这个问题?我错过了一些完全明显的东西吗?

c# generics c#-8.0 nullable-reference-types

28
推荐指数
4
解决办法
977
查看次数

比较C#中的枚举标志

我需要检测是否在枚举值中设置了一个标志,哪个类型用Flag属性标记.

通常它是这样的:

(value & flag) == flag
Run Code Online (Sandbox Code Playgroud)

但是因为我需要通用泛型(有时在运行时我的事件只有一个"Enum"引用.我找不到一个简单的方法来使用&运算符.目前我这样做:

    public static bool IsSet<T>(this T value, T flags) where T : Enum
    { 
        Type numberType = Enum.GetUnderlyingType(typeof(T));

        if (numberType.Equals(typeof(int)))
        {
            return BoxUnbox<int>(value, flags, (a, b) => (a & b) == b);
        }
        else if (numberType.Equals(typeof(sbyte)))
        {
            return BoxUnbox<sbyte>(value, flags, (a, b) => (a & b) == b);
        }
        else if (numberType.Equals(typeof(byte)))
        {
            return BoxUnbox<byte>(value, flags, (a, b) => (a & b) == b);
        }
        else if (numberType.Equals(typeof(short)))
        {
            return BoxUnbox<short>(value, flags, (a, …
Run Code Online (Sandbox Code Playgroud)

c# generics enums flags casting

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

贵公司对(技术)"创新"的立场是什么?

.NET 3.5,.NET 4.0,WPF,Silverlight,ASP.NET MVC - 现在有很多新的微软技术发布/即将推出.(我给出的示例是所有Microsoft技术,但这适用于任何语言或平台).我很好奇这是如何在你工作的公司处理的.几个例子:

  • 您是否拥有确定公司使用的技术的CTO?
  • 开发团队是否可以自由选择他们使用的技术?例如:框架版本,经典ASP.NET vs ASP.NET MVC,ADO.NET实体框架vs Linq2Sql或NHibernate?或者这些混合?
  • 您所从事的公司有哪些新技术可以尝试?为什么
  • 您的公司是否有专门的资源(时间)来尝试WPF或任何技术,仅用于研究,或者您是否在业余时间尝试并尝试将它们介绍给您的公司?

这些只是让我的问题更加清晰的例子.总而言之,我想知道这个过程看起来像什么,谁负责,谁做出决定.贵公司是否会加入这个行列,还是不愿意尝试新技术?你对这种情况感到满意吗?

在我工作的公司,我们仍然使用.NET 2.0(尽管我们现在正在慢慢转向.NET 3.5),没有认真研究过ASP.NET MVC,还没有尝试过WPF等等.并且,有些人发现很难说服人们去做.否则是否公平?

innovation

9
推荐指数
1
解决办法
726
查看次数

ASP.NET(MVC)Outputcache和并发请求

让我们说,理论上,我在我的网站上有一个页面/控制器动作,它做了一些非常重的事情.完成它的操作大约需要10秒钟.

现在,我使用.NET的outputcache机制将其缓存15分钟(例如,我使用[OutputCache(Duration = 900)])如果在15分钟后缓存过期并且100个用户在10秒内再次请求页面执行该操作,会发生什么情况重处理?

  1. 繁重的东西只是第一次完成,并且有一些锁定机制,以便其他99个用户将获得缓存结果
  2. 沉重的东西完成了100次(服务器瘫痪,因为它可能需要100*10秒)

很容易问题,但我不是百分百肯定.我希望它是第一,但是:-)

谢谢!

asp.net asp.net-mvc outputcache

9
推荐指数
1
解决办法
2645
查看次数

在非泛型方法中使用反射等待Task <TDerived>的结果

考虑以下情况:

class A
{
    public int Id;
}

class B : A
{

}

class Main
{
    public async Task<int> Create(Type type)
    {
        MethodInfo method = this.GetType().GetMethod("Create", new Type[] { typeof(string) }).MakeGenericMethod(new Type[] { type });
        A a = await (Task<A>)method.Invoke(this, new object[] { "humpf" });
        return a.Id;
    }

    public async Task<T> Create<T>(string name) where T : A
    {
        T t = await Foo.Bar<T>(name);
        return t;
    }
}
Run Code Online (Sandbox Code Playgroud)

呼叫new Main().Create(typeof(B))将失败

无法将' System.Threading.Tasks.Task[B]'类型的对象强制转换为' System.Threading.Tasks.Task[A]'

我不太明白,因为在这种情况下,Generic Create<T>方法只返回始终从' …

c# generics reflection async-await

9
推荐指数
1
解决办法
2347
查看次数

如何在C#中安装和使用Emgu CV?

我正在尝试使用Emgu CV进行图像处理项目,但我仍然不知道要求.谁能告诉我所需的dll文件是什么?我应该在哪里复制它们才能使用该包装器?请从头开始描述.谢谢.

c# emgucv c#-4.0

6
推荐指数
1
解决办法
3万
查看次数