小编san*_*ndy的帖子

具有依赖项的自定义MSBuild任务

我编写了一个使用第三方程序集的MSBuild任务.

当我在我的项目中使用任务时,MSBuild抱怨它无法加载第三方程序集(毫不奇怪).

我应该在哪里放置第三方程序集,以便MSBuild可以使用它们.我尝试添加项目引用但没有成功.

msbuild

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

什么可以导致IIS接收HTTP动词"2GET"

我有一个用户在单击我的应用程序中的链接时间歇性地接收HTTP 405.据我所知,链接没什么好笑的......

<a id="ctl00_ctlNavigationMenu_viewTransfersLink" href="Navigate.ashx?target=6">- View Transfers</a>
Run Code Online (Sandbox Code Playgroud)

正如我所说,大多数时候链接成功执行.然而,非常偶然的用户已被满足:

405 - 不允许用于访问此页面的HTTP动词.

当我检查IIS日志时,我可以看到以下条目:

2009-02-04 15:12:50 192.168.202.204 2GET /Navigate.ashx target=6 80 - 192.168.202.141 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+InfoPath.2;+.NET+CLR+2.0.50727) 405 0 1 13203
Run Code Online (Sandbox Code Playgroud)

这似乎是报告用户的浏览器使用动词2GET提交了请求.怎么会这样?

通过我们的测试服务器上的日志,我可以看到此问题的一些其他实例:

2008-11-06 13:30:10 192.168.202.204 2GET /Content/Css/origo_advanced_horiz.css - 80 - 192.168.202.190 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322) 405 0 1 109
2008-11-06 13:31:44 192.168.202.204 2GET /Content/Css/origo_advanced_horiz.css - 80 - 192.168.202.190 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322) 405 0 1 62
2008-11-06 13:37:20 192.168.202.204 2GET /Content/Css/datepicker.css - 80 - 192.168.202.190 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322) 405 0 1 109
2008-11-06 14:06:00 192.168.202.204 2GET /Content/Css/origo_advanced_horiz.css - 80 - …
Run Code Online (Sandbox Code Playgroud)

asp.net http http-status-code-405

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

在ASP.NET MVC中,我在使用正确的类型对象呈现页面时遇到错误的类型错误

我正在使用MVC Preview 5开发一个应用程序.我使用了类型化的视图.

设置debug ="false"后,我发现我收到了表单错误:

"传递到字典中的模型项的类型为'blah.Models.UserAdmin.IndexData',但此字典需要类型为'blah.Models.OrganisationAdmin.IndexData'的模型项".

调试打开时,我没有收到这些错误.

看起来MVC框架是按视图名称缓存视图.如果我有两个使用相同名称的视图的操作(虽然在不同的命名空间中),我发现只有先执行的操作成功,第二个总是导致此错误.

例如,我有一个UserAdminController和一个OrganisationAdminController.

  • 两者都有"索引"动作.

  • 两者都使用名为'Index.aspx'的视图(每个视图都包含在控制器的视图文件夹中; Views/UserAdmin/Index.aspx和Views/OrganisationAdmin.Index.aspx).

  • 两个视图都是类型化的,并使用名为IndexData的模型(blah.Models.UserAdmin.IndexData和blah.Models.OrganisationAdmin.IndexData)

如果我首先访问OrganisationAdmin/Index,我发现任何后续查看UserAdmin/Index的尝试都会导致上面显示的错误消息.

相反,如果我首先访问UserAdmin/Index(重新启动应用程序后),我发现导航到OrganisationAdmin/Index会导致等效错误(反之类型).

我重命名了我的一个观点"UserAdminIndex.aspx",这似乎解决了这个问题.但是,这不应该是一个问题.当然MVC框架支持类似命名的视图?我错过了什么?

任何帮助感激不尽.

请注意,我已经看到了一个问题"在ASP.NET MVC中,我在使用正确的类型化对象呈现用户控件时遇到了错误的类型错误".我遇到了类似的问题,但我没有使用RenderUserControl().

堆栈跟踪:

InvalidOperationException: The model item passed into the dictionary is of type 'blah.Models.RoleAdmin.IndexData' but this dictionary requires a model item of type 'blah.Models.UserAdmin.IndexData'.]
   System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +231
   System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary viewDataDictionary) +99
   System.Web.Mvc.ViewPage`1.SetViewData(ViewDataDictionary viewData) +60
   System.Web.Mvc.WebFormView.RenderViewPage(ViewContext context, ViewPage page) +64
   System.Web.Mvc.WebFormView.Render(ViewContext viewContext, TextWriter writer) +85
   System.Web.Mvc.ViewResult.ExecuteResult(ControllerContext context) +206
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ActionResult actionResult) +19
   System.Web.Mvc.<>c__DisplayClass12.<InvokeActionResultWithFilters>b__f() +18
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +257
   System.Web.Mvc.<>c__DisplayClass14.<InvokeActionResultWithFilters>b__11() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc

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

使用jQuery,如何在指定CSS类的兄弟之间找到元素的索引

给出以下HTML:

<div class="component">
    <div class="component">
        <div class="component">
        </div>
    </div>
    <div class="component">
        <div class="somethingelse">
        </div>
        <div class="component">
        </div>
        <div class="component">
            <input type="button" value="Get Path" onclick="showPath(this)" />
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写函数,showPath以便它返回div与其兄弟类相关的父元素的索引component.所以在上面的示例中,我希望函数返回1.

我已经走到了这一步,但它又回归了2; 我不知道该做什么来忽略div课堂somethingelse

function showPath(element) {
    var component = $(element).closest('.component');
    alert(component.index());
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery

6
推荐指数
2
解决办法
3114
查看次数

在Entity Framework Core 2.0中包含派生子属性

使用Entity Framework Core 2.0,我试图构建一个查询以包含多态子实体的相关数据.

例如,给定以下类型:

    public class ParentEntity
    {
        public int Id { get; set; }

        public IList<ChildEntityBase> Children { get; set; }
    }

    public abstract class ChildEntityBase
    {
        public int Id { get; set; }
    }

    public class ChildEntityA : ChildEntityBase
    {
    }

    public class ChildEntityB : ChildEntityBase
    {
        public IList<GrandchildEntity> Children { get; set; }
    }

    public class GrandchildEntity
    {
        public int Id { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

以及以下配置:

    public DbSet<ParentEntity> ParentEntities { get; set; }

    protected override …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core

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

对外部用户使用 LDAP 的利弊

我在一家拥有多个面向公众的网站的公司工作。

其中一些站点是使用第三方产品(Moveable Type、myBB、Trac 等)构建的。我们还有几个基于 Microsoft 堆栈构建的定制站点。

目前,我们没有统一的认证/授权解决方案;每个站点都实现自己的用户存储。

我热衷于在所有站点上实施统一的用户身份验证。我不希望实现单点登录(如果在切换站点时提示用户输入凭据,这不会很糟糕),但我确实需要每个用户都有一个用户名和密码。

在我看来,最可能的解决方案是实现 LDAP 服务器。我们使用的一些第三方产品支持 LDAP,我可以修改我们的定制站点以使用 LDAP。

但是,我从未使用过 LDAP 存储来管理外部用户(我一直在构建自己的用户存储)。

使用 LDAP 的优缺点是什么?我是否忽略了其他选择?

谢谢

authentication forms-authentication ldap active-directory openldap

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

如何使此ASP.NET路由正常工作?

我正在尝试使用ASP.Net MVC 3编写一个非常简单的CMS系统原型.

系统有一个控制器,有两个动作:show和create.

"显示"操作的格式最多需要5个可选部分,例如domain.com/part1/part2/part3/part4/part5

"显示"操作的格式类似,但应具有领先的"创建"部分,例如domain.com/create/part1/part2/part3/part4/part5

我在global.asax中有以下设置:

    routes.MapRoute(
        "CreatePageRoute",
        "create/{part1}/{part2}/{part3}/{part4}/{part5}",
        new
            {
                controller = "Page",
                action = "Create",
                part1 = UrlParameter.Optional,
                part2 = UrlParameter.Optional,
                part3 = UrlParameter.Optional,
                part4 = UrlParameter.Optional,
                part5 = UrlParameter.Optional
            });

    routes.MapRoute(
        "Default",
        "{part1}/{part2}/{part3}/{part4}/{part5}",
        new
            {
                controller = "Page",
                action = "Show",
                part1 = UrlParameter.Optional,
                part2 = UrlParameter.Optional,
                part3 = UrlParameter.Optional,
                part4 = UrlParameter.Optional,
                part5 = UrlParameter.Optional
            }
        );
Run Code Online (Sandbox Code Playgroud)

如果我的"显示"方法无法找到与提供的路径匹配的页面,则会返回"未找到"页面,其中包含使用提供的路径创建新页面的选项.此链接使用以下内容定义:

@Html.ActionLink("Yes", "Create") 
Run Code Online (Sandbox Code Playgroud)

["是"代表问题的答案"你想为这条路径创建一个页面吗?"]

因此测试的 '默认' 的路线时,我看到我的 '显示' 操作成功地呼吁所有以下路径:{空} AA/BA/B/CA/B/C/DA/B/C/d/Ë

这很棒.

但是,由语句"@ Html.ActionLink("是","创建")"生成的结果"创建"链接会产生不一致的结果.它似乎根据输入的长度生成不同的超链接.结果如下:

对于路径"{empty}",链接提供"localhost {:port} /" - 我希望"localhost …

asp.net asp.net-mvc routing url-rewriting asp.net-mvc-3

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

如何在负载均衡器后面配置UseCookieAuthentication

我正在配置.netcore应用程序以使用OIDC身份验证(由IdentityServer提供)。

我在启动中包含了以下代码

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = "Cookies",
    AutomaticAuthenticate = true,
    ExpireTimeSpan = TimeSpan.FromMinutes(60)
});

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    AuthenticationScheme = "oidc",
    SignInScheme = "Cookies",

    Authority = "https://myauthority",
    ClientId = "myclient",
    CallbackPath = "/",
    ResponseType = "id_token token",
    Scope = { "openid", "profile", "email" },
});
Run Code Online (Sandbox Code Playgroud)

该应用程序托管在ECS中运行的docker中的AWS上。它在侦听https的应用程序负载平衡器后面运行。

我发现,因为我的应用程序本身并不使用https(因为https被负载均衡器终止),所以OIDC中间件在重定向到OIDC服务器时会生成错误的返回URL-它生成的URL以http://开头。

返回URL由AuthenticationHandler基类中名为BuildRedirectUri的方法生成。它仅使用接收请求的协议-似乎没有任何方法可以覆盖此请求。

protected string BuildRedirectUri(string targetPath)
{
    return this.Request.Scheme + "://" + this.Request.Host + this.OriginalPathBase + targetPath;
}
Run Code Online (Sandbox Code Playgroud)

因此,鉴于似乎无法配置中间件来强制HTTP重定向,我还有哪些其他选择?

我是否应该编写一个“高级”中间件组件来侦听重定向请求并修改协议?还是有解决此问题的更好方法?

c# openid-connect identityserver3 identityserver4

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

开始使用TDD和DDD

我刚读完Eric Evans的"领域驱动设计:解决软件核心的复杂性",我正在尝试编写我的第一个以域为中心的应用程序(在C#中).

我们的服务台将使用该应用程序来跟踪用户的计算机分配情况.

我已经勾勒出一个简单的类图来反映域的一部分.看起来像这样......

显示两个类的类图:所有者和计算机.计算机和所有者之间存在名为"分配给"的单向关联.http://www.freeimagehosting.net/uploads/183dd57031.jpg

我还确定了我的第一个功能(将计算机分配给用户)并为其编写了测试...

[Test]
public void AllocateToUser()
{
    var user = new Owner("user1");
    var computer = new Computer("computer1");

    computer.Allocate(user);

    Assert.AreEqual(user.Username, computer.AllocatedTo.Username);
}
Run Code Online (Sandbox Code Playgroud)

最后,我编写了代码以使测试通过.

public class Computer
{
    public Computer(string name)
    {
        Name = name;
    }

    public string Name
    { get; private set; }

    public Owner AllocatedTo
    { get; private set; }

    public void Allocate(Owner owner)
    {
        AllocatedTo = owner;
    }
}

public class Owner
{
    public Owner(string username)
    {
        Username = username;
    }

    public string Username
    { …
Run Code Online (Sandbox Code Playgroud)

c# tdd domain-driven-design repository-pattern

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