我想验证ASP.NET Web API中文件上传的文件扩展名(注意:我意识到这不是一个完全验证的验证方法).
我正在使用它MultipartFormDataStreamProvider来处理POSTed文件.由于Request.Content.Headers.ContentDisposition在提供程序处理文件(via ReadAsMultipartAsync)之前为null ,验证请求文件名的最佳位置在哪里?
我在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) 我们有一个多租户Web应用程序,客户可以在其中为其站点设置自定义域.
当请求无效域时,我们需要在不同的域上显示错误页面.处理这个问题的正确方法是什么?我想也许在另一个网站上发一个303,它总是返回404.这会让搜索引擎感到满意吗?
我们使用域事件模式并依靠我们的IoC容器来定位特定类型事件的处理程序:
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) 我正在寻找一个轻量级,进程中,异步消息总线,并遇到了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) 我刚开始使用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文件路径(如果我不想删除版本号)?
是否可以在暂停状态下向调度程序添加触发器?我发现如果我不指定开始时间,它将立即开始。
除了立即调用之外,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) 使用Azure Service Bus实现基于强类型消息的路由的最简单方法是什么.
假设我们只有一个消费者并且正在使用服务总线队列,是否更容易为每种消息类型创建队列(在我们的例子中是事件消息),或者只是为所有消息创建一个队列并处理消费者的路由?
如果我们有多个消费者并且想要发布pub-sub消息,那么我们是应该为每种消息类型创建一个主题,为每个消息类型创建一个订阅,还是只为所有消息创建一个主题,然后在消费者上处理路由?
在传统的数据驱动的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?
我正在使用官方的 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.Title到Post.title查询成功执行。
有没有办法告诉驱动程序反序列化为 pascal-cased 属性并默认序列化为驼峰式属性?
c# ×2
.net ×1
angularjs ×1
azure ×1
azure-queues ×1
http ×1
javascript ×1
messaging ×1
mongodb ×1
ninject ×1
protobuf-net ×1
quartz.net ×1
requirejs ×1
seo ×1
servicebus ×1
tpl-dataflow ×1