小编Jay*_*Jay的帖子

在MVC中实现自定义标识和IPrincipal

我有一个基本的MVC 2 beta应用程序,我正在尝试实现自定义Identity和Principal类.

我创建了实现IIdentity和IPrincipal接口的类,实例化它们,然后将CustomPrincipal对象分配给Global.asax的Application_AuthenticateRequest中的Context.User.

这一切都成功,对象看起来很好.当我开始渲染视图时,页面现在失败了.第一个失败是在以下代码行的默认LogoOnUserControl视图中:

 [ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
Run Code Online (Sandbox Code Playgroud)

如果我把它拉出来,那么就会失败一个不同的"Html.ActionLink"代码行.

我收到的错误是:

WebDev.WebHost40.dll中出现"System.Runtime.Serialization.SerializationException"类型的异常,但未在用户代码中处理

附加信息:成员'Model.Entities.UserIdentity,Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'的类型未解析.

为了在MVC中使用自定义标识,我是否需要在Identity中实现一些其他属性?我试图在Identity类中实现[Serializable()]但它似乎没有影响.

更新: 我尝试了3-4种实现此方法的替代方法但仍然失败并出现相同的错误.如果我直接使用GenericIdentity/GenericPrincipal类,则不会出错.

GenericIdentity ident = new GenericIdentity("jzxcvcx");
GenericPrincipal princ = new GenericPrincipal(ident, null);
Context.User = princ;
Run Code Online (Sandbox Code Playgroud)

但是这让我无处可去,因为我试图使用CustomIdentity来保存一些属性.如果我实现了IIdentity/IPrincipal接口或继承了我的CustomIdentity/CustomPrincipal的GenericIdentity/GenericPrincipal,它将失败并显示上面的原始错误.

iprincipal iidentity asp.net-mvc-2

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

.Net在nTier App中的会员资格

假设我有一个ASP.Net MVC应用程序,这个应用程序(UI)引用业务逻辑层(BLL),BLL引用我的数据访问层(DAL).

我正在使用自定义成员资格和角色提供程序进行授权.

我正在尝试确定哪些层需要引用我的成员资格提供程序.

在MVC中,您可以通过以下方式执行授权检查:

[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

在我的BLL中,我可能想检查用户是否也在角色中:

public static bool IsRoleEditor(User user, Role userRole)
  {
   bool retValue = false;

   if (user.Application.AppID == UserRole.Application.AppID)
   {
        if (Roles.IsUserInRole("ModifyRoles"))
        {
           retValue = true;
        }


    return retValue;
   }
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我将不得不在两个层中引用和实例化Membership类.这是构建这样的应用程序的正确方法吗?似乎有很多冗余.

由于我有一个BLL,我是否避免使用"[Authorize(Roles ="SomeRoleName")]"属性,而是从MVC代码中调用BLL函数来检查用户是否在角色中?如果我这样做,MVC仍然需要引用成员资格提供程序进行身份验证,无论如何要利用Login和其他ASP控件,对吗?

我离开基地并向错误的方向前进吗?

.net asp.net-mvc asp.net-membership n-tier-architecture

10
推荐指数
1
解决办法
1707
查看次数

如何将方法ReturnType与预定义类型进行比较

使用Microsoft Roslyn我试图确定方法返回类型是否为void.
我在MethodDeclarationSyntax上有句柄,可以看到名为"ReturnType"的属性,这是一个void的PredefinedType.我是否必须实际检查关键字类型?有一个更好的方法吗?

((PredefinedTypeSyntax)methodDec.ReturnType).Keyword.Kind  != SyntaxKind.VoidKeyword
Run Code Online (Sandbox Code Playgroud)

有没有推荐的方法来完成我想要做的事情?

.net roslyn

10
推荐指数
1
解决办法
900
查看次数

NuGet打包和引用dll

背景: 我有两个名为"A"和"B"的组件.""A"引用"B"."A"还引用了一些我认为应该打包在nupkg中的附加dll(Microsoft.Enterprise Library.Data和Microsoft Enterprise Library.Common).

我相信我的nupkg软件包应包含"A","B"和两个"Microsoft Enterprise"程序集的程序集输出,这样当有人安装我的软件包时,它会直接引用程序集"A"和其他三个程序集将可用(但不能直接引用,以便它们的应用程序可以运行.打包非引用dll的正确方法是什么?

尝试#1:将所有必需的dll打包在\net35文件夹中 根据关于"references"元素的NuGet文档 "如果省略此元素,则通常的行为适用,即引用lib文件夹中的每个程序集."

因此,我假设通过使用此元素,它将仅包含指定为引用的程序集.如果我也使用"file"元素,情况似乎并非如此<file src=*.dll" target="lib\net35" />.如果我有一个这样的元素将所有dll复制到包中,它会导致实现此包的程序集引用\net35目录中的所有程序集.这不是我想要做的.我期待一些魔法,只有"引用"中指定的程序集才会被实际引用,而其他所有程序集将保留在爆炸的\ packages文件夹中,并且应用程序将起作用,因为所有dll都位于同一目录中.也许我不对......

尝试#2作为内容添加到项目中 如果我在打包时将未引用的程序集放入\ content\lib而不是lib \net35,则会在项目中创建一个\ lib文件夹,并直接将\ content\lib dll转储到该项目中,然后强制执行我们将它们检查为源代码控制.这可以工作,编译和运行,但我真的不希望这些存储在项目的\ lib文件夹中.

我正在寻找一个解决方案,其中项目获取对"A"的引用,并且仍然可以与其他所需的程序集共同运行,但不能直接引用.似乎尝试#1是正确的路径,但也许有一个错误?

仅供参考,我直接将此作为NuGet的一个问题进入,以确定该团队也有答案.

nuget nuget-package

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

XSL:计算以前唯一的兄弟姐妹

好的,我想应用一个XSL样式表来计算以前唯一的"ROLE"节点,并将当前节点之前的唯一ROLE节点数量的@name输出格式.我浪费了几个小时才能实现一件容易的事情.我试图用几种方法实现这个,包括Muenchian方法,if/with variables(不能增加变量),将模板应用到模板等都无济于事.

我有以下XML:

<ROLEACTIONINFO>
  <ROLE name="TESTER" /> 
  <ROLE name="PARENT1"/>
  <ROLE name="PARENT1"/>
  <ROLE name="PARENT1"/>
  <ROLE name="PARENT2"/>
  <ROLE name="PARENT2"/>
  <ROLE name="PARENT3"/>
  <ROLE name="PARENT4"/>
  <ROLE name="TESTROLE"/>
</ROLEACTIONINFO>
Run Code Online (Sandbox Code Playgroud)

输出示例:

TESTER  1
PARENT1 2
PARENT1 2
PARENT1 2
PARENT2 3
PARENT2 3
PARENT3 4
PARENT4 5
TESTROLE  6
Run Code Online (Sandbox Code Playgroud)

获取唯一的前置节点的计数是我的问题.任何帮助,将不胜感激

xml xslt xpath

5
推荐指数
1
解决办法
4959
查看次数

有没有一种方法可以使用Roslyn确定变量的潜在值?

我正在使用Roslyn CTP,并且试图确定类中变量的值是否具有值。可以说我正在尝试检测某人何时使用BinaryExpressionSyntax来确定字符串是否等于“”。

例如:

private void StringLiteral(string a)
        {
            if (a == "")   //flagged because we do not see a explicit set of 'a'
            {
                Console.WriteLine("Empty String");
            }
            a="42";
            if (a == "")  //not flagged because 'a' has been set
            {
                Console.WriteLine("Empty String");
            }
}
Run Code Online (Sandbox Code Playgroud)

我可以获取BinaryExpressionSyntax并使用语义和语法检查左侧和右侧,但是在调试器中看不到任何跟踪可能值的内容。我知道这可能会很简单,例如:

private void BooleanTest(string a, bool b)
        {

            if (b)   
            {
                a="";
            }
            if (!b)  
            {
                a="42";
            }
             if (a == "")  // Maybe 'a' is set maybe it isn't so we will probably not flag …
Run Code Online (Sandbox Code Playgroud)

.net roslyn

5
推荐指数
1
解决办法
601
查看次数

您可以使用Roslyn从语义符号转换回语法树节点吗?

如果我有一个语义符号,可以说一个参数进入一个方法,我可以回到这个符号的语法节点吗?

在下面的代码中假设我在语法树中有一个"param"标识符的句柄param = "TEST",我交换到语义模型来确定param的OriginalDefinition,它将我带到string param方法声明中.我现在想要交换回语法树并转到原始定义节点.

我能够用我认为的黑客做到这一点 var token = tree.Root.FindToken(origNode.Locations[0].SourceSpan.Start).Parent;

有一个更好的方法吗?也许类似于GetSemanticInfo()语法树的东西?

private void DoSomething(string param)
{
  param = "TEST";
}
Run Code Online (Sandbox Code Playgroud)

.net roslyn

5
推荐指数
1
解决办法
278
查看次数

是否可以使用Roslyn检测无法访问的代码或其他内置编译警告

是否可以使用Roslyn检测无法访问的代码或其他内置编译警告?

private void DoSomething()
{
     string a = "TEST";

     throw new Exception("Why would I throw an exception here?");

     a = "This will never be reached"; //this is a compile time warning for unreachable code...Can I detect it?

}
Run Code Online (Sandbox Code Playgroud)

我已经尝试在Semantic和Syntax方法中检查节点属性,但没有看到任何问题或警告集合.

.net roslyn

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