小编Mik*_*ott的帖子

为什么C#编译器不是静态方法调用实例方法的错误代码?

以下代码有一个静态方法Foo(),调用实例方法,Bar():

public sealed class Example
{
    int count;

    public static void Foo( dynamic x )
    {
        Bar(x);
    }

    void Bar( dynamic x )
    {
        count++;
    }
}
Run Code Online (Sandbox Code Playgroud)

它编译时没有错误*但在运行时生成运行时绑定程序异常.正如预期的那样,删除这些方法的动态参数会导致编译器错误.

那么为什么有一个动态参数允许编译代码?ReSharper也没有将其显示为错误.

在Visual Studio 2008中编辑1:*

编辑2:添加,sealed因为子类可能包含静态Bar(...)方法.即使是密封版本也可以在运行时调用除实例方法之外的任何方法时进行编译.

c# compiler-errors dynamic visual-studio-2008

109
推荐指数
3
解决办法
2639
查看次数

如何重定向到ASP.NET MVC中的动态登录URL

我正在创建一个多租户网站,为客户端托管页面.URL的第一部分将是一个字符串,用于标识客户端,使用以下URL路由方案在Global.asax中定义:

"{client}/{controller}/{action}/{id}"
Run Code Online (Sandbox Code Playgroud)

这样工作正常,使用/ foo/Home/Index等URL.

但是,当使用[Authorize]属性时,我想重定向到也使用相同映射方案的登录页面.因此,如果客户端是foo,则登录页面将是/ foo/Account/Login,而不是web.config中定义的固定/帐户/登录重定向.

MVC使用HttpUnauthorizedResult返回401未授权状态,我认为这会导致ASP.NET重定向到web.config中定义的页面.

那么有谁知道如何覆盖ASP.NET登录重定向行为?或者通过创建自定义授权属性来重定向MVC会更好吗?

编辑 - 答:在深入研究.Net源代码后,我认为自定义身份验证属性是最佳解决方案:

public class ClientAuthorizeAttribute: AuthorizeAttribute
{
    public override void OnAuthorization( AuthorizationContext filterContext )
    {
        base.OnAuthorization( filterContext );

        if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult )
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary
                {
                    { "client", filterContext.RouteData.Values[ "client" ] },
                    { "controller", "Account" },
                    { "action", "Login" },
                    { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net authentication asp.net-mvc forms-authentication asp.net-routing

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

如何在ASP.NET MVC中获取控制器中的路由名称?

ASP.NET MVC路由在映射时具有名称:

routes.MapRoute(
    "Debug", // Route name -- how can I use this later????
    "debug/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = string.Empty } );
Run Code Online (Sandbox Code Playgroud)

有没有办法获取路由名称,例如上面的例子中的"Debug"?我想在控制器的OnActionExecuting中访问它,以便我可以在调试时在ViewData中设置内容,例如,通过在/ debug /前面添加一个URL ...

model-view-controller asp.net-mvc routing

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

如何使用JToken.ToObject <>()方法的JsonConverter?

我正在成功地将一个大型JSON文件读入JObjects.我要反序列化的类型之一具有System.Drawing.Color类型的属性.此属性的JSON具有表示颜色的整数值.当我尝试做ToObject()时,我得到了

将值16711680转换为类型'System.Drawing.Color'时出错.

解决方案似乎是一个简单的JsonConverter,它可以从一个整数转换为一个Color但我无法找到如何将转换器与现有的JObject一起使用.我错过了一些明显的东西吗

c# type-conversion json.net converters

12
推荐指数
1
解决办法
4516
查看次数

使用阻止REST请求来实现发布/订阅

我最近被要求调查与希望使用RESTful Web服务提供电话事件(例如线路振铃,接听延期,呼叫清除)的电话系统供应商集成的可行性.

我指出REST是一个请求/响应协议,他们正在进行发布/订阅.他们建议的解决方案是发出HTTP REST请求,该请求会阻止,然后在事件可用时或者超时时最终响应.

无论哪种方式,都会有另一个请求无限制地获取下一个事件等等.

这个想法让我感到畏缩,但我确信iPhone"推送"电子邮件就是这样运作的.

这是REST的合理使用吗?

rest asynchronous publish-subscribe

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

你如何模拟你的存储库?

我用Moq来模拟我的存储库.但是,最近有人说他们更喜欢创建存储库接口的硬编码测试实现.

每种方法的优缺点是什么?

编辑:澄清了与Fowler链接的存储库的含义.

testing mocking repository-pattern

8
推荐指数
2
解决办法
1490
查看次数

什么是NHibernate HiLo发电机参数?

我见过Fabio Maulo的一些文档,它们显示了以下参数:

<id name="Id" type="Int64" column="cat_id">
    <generator class="hilo">
            <param name="table">hi_value</param>
            <param name="column">next_value</param>
            <param name="max_lo">100</param>
    </generator>
</id>
Run Code Online (Sandbox Code Playgroud)

但是,在这个问题上,海报使用了<param name="schema">...我希望能够为HiLo生成器指定模式.

所有发电机参数都有明确的文件吗?我试过谷歌搜索没有成功.

nhibernate hilo

8
推荐指数
1
解决办法
1567
查看次数

.Net中的PHP crypt()函数?

我正在重写ASP.NET MVC中的PHP网站.我想保持相同的用户群,但使用PHP crypt()函数对密码进行哈希处理.我需要.Net中的相同功能,以便我可以在登录时散列密码并根据用户数据库中的散列密码进行检查.

在这种情况下,crypt使用CRYPT_MD5实现 - 哈希都以$ 1 $开头

我尝试了Phalanger,但它没有crypt功能的MD5实现.

有没有人知道.Net中的一个?CodeProject上的crypt()的C#示例使用DES,而不是MD5.

我在C#中尝试了以下代码,使用salt +密码,密码+ salt和salt的不同排列,使用和不使用$ 1 $前缀和$ suffix.None给出与PHP相同的结果:

static void Main(string[] args)
{
    const string salt = "somesalt";
    const string password = "fubar";
    const string plaintextString = password + salt;
    byte[] plaintext = GetBytes(plaintextString);
    var md5 = MD5.Create("MD5");
    byte[] hash = md5.ComputeHash(plaintext);
    string s = System.Convert.ToBase64String(hash);
    Console.WriteLine("Hash of " + password + " is " + s);
    Console.ReadKey();
}

private static byte[] GetBytes(string s)
{
    var result = new byte[s.Length];
    for (int …
Run Code Online (Sandbox Code Playgroud)

.net php asp.net security encryption

7
推荐指数
1
解决办法
3900
查看次数

如何使用AutoMapper为给定属性指定特定类型转换器

如何覆盖AutoMapper用于给定属性的类型转换器?

例如,如果我有:

public class Foo
{
    public string Name { get; set; }
}

public class Bar
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我只想将Foo.Name映射到Bar.Name,但使用指定的类型转换器.我知道如何使用以下方法:

Mapper
    .CreateMap<Foo,Bar>()
    .ForMember( x => x.Name, opt => opt.ResolveUsing<FooNameResolver>() );
Run Code Online (Sandbox Code Playgroud)

但是这会将转换硬编码为在Foo上使用Name属性.如果我在这个或其他类中的其他属性上有相同类型的转换,我必须为每个类创建一个解析器类.

我不想为string - > string指定转换器,因为此转换特定于此属性或其他类似属性.

我只想覆盖类型转换器!我敢肯定这一定是可能的,但我在它上面是空白的:-(

我是这样的:

Mapper
    .CreateMap<Foo,Bar>()
    .ForMember( x => x.Name, opt => opt.Using<MySpecialStringConverter>() );
Run Code Online (Sandbox Code Playgroud)

typeconverter automapper

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

如何让SpecFlow使用xUnit.net作为测试运行器

我正在尝试使用xUnit.net作为SpecFlow的测试运行器.官方下载区域的SpecFlow 1.2二进制文件不包含xUnit.net提供程序,但GitHub上的主分支有一个,所以我从中构建了SpecFlow.Core.dll.我正在使用xUnit.net 1.5.

但是,当我在我的规范项目中的app.config中更改unitTestProvider名称时,我得到一个空引用自定义工具错误,生成的.feature.cs文件是单行:

Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)

有没有人成功让SpecFlow与xUnit.net一起工作?如果是这样,怎么样?

xunit.net specflow

5
推荐指数
3
解决办法
9732
查看次数

如何在FitNesse subwiki中包含所有祖先的SetUp页面?

我在根级别有一个SetUp页面,工作正常.但是,当我在FitNesse中添加一个子昵称时,我想将一个SetUp页面放在子昵称的级别.这包含但随后根级别SetUp没有.

例如,具有以下结构:

Foo suite
  SetUp
  TestPage
  Bar suite
    SetUp
    NestedTestPage
Run Code Online (Sandbox Code Playgroud)

如何让FitNesse在NestedTestPage中包含两个SetUp页面?

fitnesse

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

如何在不在浏览器中打开页面的情况下运行ASP.NET 5

在ASP.NET 5之前,项目属性中的Visual Studio 2015中有一个选项 启动操作的网页,在运行Web应用程序时不打开页面.这允许您在浏览器中打开现有页面并刷新它.

此选项现已消失,导致每次点击运行时都会打开一个新的浏览器页面,即使我在正确的URL上打开了一个页面,准备刷新.

我怎样才能获得以前的行为?

asp.net-core

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