小编nes*_*h_s的帖子

如何让静态Html页面通过IIS7.0中的HttpModule?

我创建了一个简单的HttpModule,它在将响应发送到客户端之前从响应中删除空格.这适用于IIS7.0上的aspx页面,但如果我创建一个静态html页面并调用它,HttpModule不会启动(我知道的方式是因为源包含空格,否则本应删除).显然有些东西我做得不对,但不知道是什么.

我的网站位于.NET 4.0和.NET 4.0的应用程序池中ManagedPipelineMode = Integrated.

我已将模块添加为ManagedModule,并引用GAC的强名称密钥程序集.

谢谢

编辑 - 这是web.config中的system.webserver部分

<system.webServer>
  ...
  <modules runAllManagedModulesForAllRequests="true">
    <add name="RemoveWhitespaceHttpModule" 
         type="HttpModules.Modules.RemoveWhitespaceHttpModule, HttpModules, 
           Version=1.0.0.0, Culture=neutral, PublicKeyToken=8a83u4bi47o9fo0d" 
           preCondition="" />
  </modules>
  <defaultDocument>
    <files>
      <add value="TestForm.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

编辑 - 修正了它.对于任何感兴趣的人,这是我的模块检查响应然后决定是否继续删除空格的方式

if (contentType.Equals("text/html") 
  && httpContext.Response.StatusCode == 200 
  && httpContext.CurrentHandler != null)
{ ... }
Run Code Online (Sandbox Code Playgroud)

问题出在httpContext.CurrentHandler!= null之上的第三个条件.当为静态.html页面调用此模块时,currentHandler为null,因此代码永远不会进入操作html.我已经删除了这第三个条件,它现在有效.谢谢大家的回答

asp.net iis-7 static-html c#-4.0

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

CQRS中的事件版本控制

我们处于开发周期的一个阶段(asp.net mvc applciation),我们需要对现有的命令和事件进行更改(比如添加/删除一些属性等).

我一直在努力寻找一种在系统中引入命令/事件版本控制的方法.我已经在google/stackoverflow等上阅读了很多帖子,但我还是要看一个实现它的代码示例.在版本控制时是否应该遵循推荐的模式.如果是,任何示例/片段?

编辑:这是我有多远

  1. 我已经向后版本化了我的事件,这样最新的事件将始终被称为相同,而过时的事件将添加一个后缀,如'_V1','_ V2'等.

所以如果我有一个活动

public class OrderSubmittedEvent : IDomainEvent
{
    public int OrderId { get; private set; }

    public OrderSubmittedEvent(int orderId)
    {
        OrderId = orderId;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我必须添加一些属性,我将上面的事件重命名为

public class OrderSubmittedEvent_V1 : IDomainEvent
{
    public int OrderId { get; private set; }

    public OrderSubmittedEvent_V1(int orderId)
    {
        OrderId = orderId;
    }
}
Run Code Online (Sandbox Code Playgroud)

并引入另一个与我的原始事件同名的事件,但添加了属性,如此

public class OrderSubmittedEvent : IDomainEvent
{
    public int OrderId { get; private set; }

    public OrderSubmittedEvent(int version = 1, int orderId = 0, string …
Run Code Online (Sandbox Code Playgroud)

versioning events domain-driven-design cqrs

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

存储库模式与泛型和DI

我有一个基本存储库合同,其他合同扩展,如下所示

public interface IBaseRepository<T> where T : class 
{
  IList<T> GetContents();
}
Run Code Online (Sandbox Code Playgroud)

然后还有其他合同,如下所示扩展它

public interface IRepository1 : IBaseRepository<MyClass1>
{
}

public interface IRepository2 : IBaseRepository<MyClass2>
{
}
Run Code Online (Sandbox Code Playgroud)

我按如下方式实现IRepository1

public class Repository1 : IRepository1
{
 public IList<MyClass1> GetContents()
 {
  //some code goes here
 }
} 
Run Code Online (Sandbox Code Playgroud)

同样适用于IRepository2

public class Repository2 : IRepository2
{
 public IList<MyClass2> GetContents()
 {
  //some code goes here
 }
} 
Run Code Online (Sandbox Code Playgroud)

现在我有一个服务Service1,其中包括如下的IService

public class Service1 : IService
{


}
Run Code Online (Sandbox Code Playgroud)

我想在我的服务构造函数中使用我的基本存储库(IBaseRepository),获取此基本存储库的实例并像这样使用它

 public class Service1 : IService
 {
   private IBaseRepository<T> _baseRepository;
   public …
Run Code Online (Sandbox Code Playgroud)

c# generics dependency-injection repository-pattern

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

最佳实践 - 在单页应用程序中调用 API 和服务

我有一个单页应用程序,需要调用各种 Web 服务和/或 API。我想了解从 SPA 进行 api 或服务调用的普遍认可的方法是什么。目前我们有两种方法

  1. 对于某些第 3 方 API - 我们从单页应用程序直接调用,无需服务器端代理。为了实现这一点,我们启用了 CORS。

  2. 对于其他 API 调用 - 我们调用代理(包装器),该代理负责将它们重定向到适当的端点。

我们决定使用哪种方法的方式是 - 如果在调用第 3 方 API 之前需要某种数据操作 - 我们使用代理 - 否则我们直接从 SPA 进行调用。这是一个有效的方法吗?从安全角度来看,第一种方法是否可靠,您有什么反馈吗?在第一种方法中,我们有一个仅 http 的 cookie,它被用作访问令牌来调用第 3 方 api。这是否会使我们公开的 API 变得脆弱?

提前致谢

architecture single-page-application microservices

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