小编Ben*_*ter的帖子

如何在ASP.NET Web API中验证文件上载

我想验证ASP.NET Web API中文件上传的文件扩展名(注意:我意识到这不是一个完全验证的验证方法).

我正在使用它MultipartFormDataStreamProvider来处理POSTed文件.由于Request.Content.Headers.ContentDisposition在提供程序处理文件(via ReadAsMultipartAsync)之前为null ,验证请求文件名的最佳位置在哪里?

asp.net-web-api

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

使用DataContract属性时,ProtoBuf.NET不进行序列化

我在NuGet(2.0.0.480)上使用最新版本的ProtoBuf,它没有序列化标记为DataContract/ DataMemberattributes的类型:

[DataContract]
public class Person
{
    [DataMember]
    public string Firstname { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var outputFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "person.dat");

        var person = new Person { Firstname = "ben" };

        using (var fs = new FileStream(outputFile, FileMode.OpenOrCreate)) {
            Serializer.Serialize(fs, person);
        }

        using (var fs = File.OpenRead(outputFile))
        {
            var result = Serializer.Deserialize<Person>(fs);
            Console.WriteLine(result.Firstname);
        }

        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用ProtoBuf特定属性修饰我的类:

[ProtoContract]
public class Person
{
    [ProtoMember(1)]
    public string Firstname { get; …
Run Code Online (Sandbox Code Playgroud)

protobuf-net

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

HTTP 404重定向

我们有一个多租户Web应用程序,客户可以在其中为其站点设置自定义域.

当请求无效域时,我们需要在不同的域上显示错误页面.处理这个问题的正确方法是什么?我想也许在另一个网站上发一个303,它总是返回404.这会让搜索引擎感到满意吗?

seo http

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

如何使用Ninject扫描泛型类型的所有实现

我们使用域事件模式并依靠我们的Io​​C容器来定位特定类型事件的处理程序:

public interface IHandleEvent<TEvent> where TEvent : IEvent
{
    void Handle(TEvent evnt);
}
Run Code Online (Sandbox Code Playgroud)

使用StructureMap,我们可以扫描并注册实现上述接口的所有类型,如下所示:

Scan(cfg =>
{
    cfg.TheCallingAssembly();
    cfg.ConnectImplementationsToTypesClosing(typeof(IHandleEvent<>));
});
Run Code Online (Sandbox Code Playgroud)

是否与Ninject相当?

目前我必须单独绑定每个处理程序,如下所示:

kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler1>();
kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler2>();
kernel.Bind<IHandleEvent<SomeOtherEvent>>().To<EventHandler3>();
Run Code Online (Sandbox Code Playgroud)

c# ninject

5
推荐指数
2
解决办法
650
查看次数

使用TPL Dataflow创建消息总线

我正在寻找一个轻量级,进程中,异步消息总线,并遇到了TPL Dataflow.

我目前的实现如下(https://gist.github.com/4416655上的完整示例).

public class Bus
{
    private readonly BroadcastBlock<object> broadcast =
        new BroadcastBlock<object>(message => message);

    private readonly ConcurrentDictionary<Guid, IDisposable> subscriptions
        = new ConcurrentDictionary<Guid, IDisposable>();

    public Task SendAsync<TMessage>(TMessage message)
    {
        return SendAsync<TMessage>(message, CancellationToken.None);
    }

    public Task SendAsync<TMessage>(TMessage message, CancellationToken cancellationToken)
    {
        return broadcast.SendAsync(message, cancellationToken);
    }

    public Guid Subscribe<TMessage>(Action<TMessage> handlerAction)
    {
        var handler = new ActionBlock<object>(message => handlerAction((TMessage)message));

        var subscription = broadcast.LinkTo(handler, 
            new DataflowLinkOptions { PropagateCompletion = true }, 
            message => message is TMessage);

        return AddSubscription(subscription);
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

.net task-parallel-library tpl-dataflow

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

RequireJS Dependent Paths

我刚开始使用RequireJS.我正在设置一些路径别名,以免我必须在依赖项上指定版本号,但似乎我无法将路径别名与目录别名组合在一起.例如:

require.config({
    baseUrl: "/js/app", // by default load any module IDs from js/app

    paths: {
        "libs": "/some/path/to/libs",
        "jquery": "libs/jquery-1.9.0" // loads from /some/path/to/libs/jquery-1.9.0.js
    }
});

require(["jquery"], function ($) {
    $("#foo").html("bar");
});
Run Code Online (Sandbox Code Playgroud)

RequireJS尝试从中加载jquery /js/app/libs/jquery-1.9.0.js

这是可能的还是我需要单独定义每个js文件路径(如果我不想删除版本号)?

requirejs

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

创建一个暂停的触发器

是否可以在暂停状态下向调度程序添加触发器?我发现如果我不指定开始时间,它将立即开始。

除了立即调用之外,scheduler.PauseJob还可以通过其他方式做到这一点吗?

var trigger = TriggerBuilder.Create()
    .ForJob(job)
    .WithSimpleSchedule(schedule => schedule.WithIntervalInMinutes(1).RepeatForever())
    .Build();

scheduler.ScheduleJob(job, trigger);

// Pause job immediately
scheduler.PauseJob(job.Key);
Run Code Online (Sandbox Code Playgroud)

c# quartz.net

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

使用Azure Service Bus进行基于消息类型的路由

使用Azure Service Bus实现基于强类型消息的路由的最简单方法是什么.

假设我们只有一个消费者并且正在使用服务总线队列,是否更容易为每种消息类型创建队列(在我们的例子中是事件消息),或者只是为所有消息创建一个队列并处理消费者的路由?

如果我们有多个消费者并且想要发布pub-sub消息,那么我们是应该为每种消息类型创建一个主题,为每个消息类型创建一个订阅,还是只为所有消息创建一个主题,然后在消费者上处理路由?

messaging servicebus azure azure-queues azureservicebus

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

如何处理AngularJS路由找不到的资源

在传统的数据驱动的Web应用程序中,我们经常尝试根据URL中传递的ID加载资源.如果资源不存在,我们返回404页面.

我们应该如何在AngularJS中实现同样的目标?我已经按照AngularJS电话目录教程进行操作,如果资源不存在,我目前正在执行以下操作(注意这使用了Angular $resource服务):

controllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', '$location', 'Phone',
  function($scope, $routeParams, $location, Phone) {

    $scope.phone = Phone.get({ phoneId: $routeParams.phoneId }, 
      function(phone) {
        $scope.mainImageUrl = phone.images[0];
      },
      function(response) {
        if (response.status === 404) {
          $location.path('/404'); // show phone not found page
        }
      });
}]);
Run Code Online (Sandbox Code Playgroud)

这是推荐的方法吗?考虑到我需要在几乎所有资源上执行此操作,我想知道它是否会更好地处理$routeProvider

javascript angularjs

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

MongoDB C# 驱动程序不会自动映射 pascal-cased 属性

我正在使用官方的 MongoDB C# 驱动程序来查询使用驼峰式属性名称的现有文档集合,例如post.title.

文档似乎表明不需要将文档映射到具有 pascal-cased 属性名称的 C# POCO,例如:

public class Post
{
    public ObjectId Id { get; set; }
    public string Title { get; set; }
    public string[] Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,在尝试查询集合时,出现异常:

元素“title”与 MongoDBDemo.Post 类的任何字段或属性都不匹配。

如果变Post.TitlePost.title查询成功执行。

有没有办法告诉驱动程序反序列化为 pascal-cased 属性并默认序列化为驼峰式属性?

mongodb mongodb-.net-driver

5
推荐指数
2
解决办法
2522
查看次数