[ 更新:格式说明符与格式字符串不同; 格式说明符是自定义格式字符串的一部分,其中格式字符串为"stock",不提供自定义.我的问题是说明符不是格式 ]
我一直在尝试使用格式字符串执行往返DateTime转换,格式字符串使用'zzz'格式说明符,我知道绑定到本地时间.因此,如果我尝试使用UTC日期时间进行往返,则会抛出DateTimeInvalidLocalFormat异常,它应该使用以下文本:
正在将UTC日期时间转换为仅适用于本地时间的格式的文本.使用'z'格式说明符调用DateTime.ToString时会发生这种情况,该说明符将在输出中包含本地时区偏移量.在这种情况下,要么使用指定UTC时间的'Z'格式说明符,要么使用'o'格式字符串,这是在文本中保留DateTime的推荐方法.传递由XmlConvert或DataSet序列化的DateTime时也会发生这种情况.如果使用XmlConvert.ToString,则传入XmlDateTimeSerializationMode.RoundtripKind以正确序列化.如果使用DataSet,请将DataColumn对象上的DateTimeMode设置为DataSetDateTime.Utc.
根据这个建议,我需要做的就是让我的代码工作就是用'ZZZ'代替'zzz',这样我就可以采用UTC格式了.问题是,文档中没有找到'Z',我尝试的任何'Z'格式组合,即'Z','ZZ','ZZZ',总是只转换DateTime实例,那些Z被视为文字.
有人忘记在没有告诉异常消息作者的情况下实现'Z',或者我错过了如何在没有黑客攻击的情况下用"+0000"替换有效的本地时间偏移量?
代码示例:
// This is the format with 'zzzzz' representing local time offset
const string format = "ddd MMM dd HH:mm:ss zzzzz yyyy";
// create a UTC time
const string expected = "Fri Dec 19 17:24:18 +0000 2008";
var time = new DateTime(2008, 12, 19, 17, 24, 18, 0, DateTimeKind.Utc);
// If you're using a debugger this will rightfully throw an exception
// with .NET 3.5 SP1 because 'z' …Run Code Online (Sandbox Code Playgroud) 我最近花了很多时间阅读HTTP 1.1规范并将其与REST相关联.我发现HTTP DELETE方法在其"幂等性"和安全性方面有两种解释.以下是两个阵营:
如果删除具有HTTP DELETE的资源,并且它成功(200 OK),然后您尝试删除该资源N次,则应该为每个删除调用取回成功消息(200 OK) .这就是它的"幂等性".
如果删除具有HTTP DELETE的资源,并且成功(200 OK),然后再次尝试删除该资源,则应该返回错误消息(410 Gone),因为资源已被删除.
规范说DELETE是幂等的,当然,但它也说幂等事件的序列仍然会产生副作用.我真的觉得第二阵营是正确的,第一阵营是误导.我们引入了什么"安全",允许客户认为它们是删除以前删除的资源的原因?
在第一个阵营中有很多人,包括几个关于这个问题的作者,所以我想检查是否有一些令人信服的理由,而不是导致人们进入第一阵营的情绪.
我有一个使用MVC 2 Preview 2的Web应用程序,并且在注册了所有路由之后,我需要将每个路径包装在装饰器的下游.问题是,这样做会破坏路由.最终发生的是GetVirtualPath方法将错误地匹配应用程序中的其他区域(我正在使用单项目区域).装饰器是否做任何有用的事并不重要.使用以下passthrough是你需要打破它.
public class RouteDecorator: RouteBase
{
readonly RouteBase _route;
public RouteDecorator(RouteBase route)
{
_route = route;
}
public override RouteData GetRouteData(HttpContextBase context)
{
return _route.GetRouteData(context);
}
public override VirtualPathData GetVirtualPath(RequestContext context, RouteValueDictionary values)
{
return _route.GetVirtualPath(context, values);
}
}
Run Code Online (Sandbox Code Playgroud)
在注册所有路由后,我将在一个简单的循环中分配装饰器.
var routes = RouteTable.Routes;
for (var i = 0; i < routes.Count; i++)
{
routes[i] = new RouteDecorator(routes[i]);
}
Run Code Online (Sandbox Code Playgroud)
如何在不破坏路线和区域的情况下安全地插入装饰器?
我有一个可在此处下载的复制解决方案.在复制中,路线装饰器被注释掉.将其注释回来将会中断路由,并且第一个虚拟区域的路由数据将匹配通常仅正确匹配相应命名空间的链接.
我使用标准HTML <input>控件发布多部分表单数据将大文件上载到ASP.NET服务器.这是一个ASP.NET MVC应用程序.
根据MSDN,HttpPostedFile该类缓冲到磁盘开箱即用:
"文件以MIME multipart/form-data格式上传.默认情况下,大于256 KB的所有请求(包括表单字段和上传文件)都缓冲到磁盘,而不是保存在服务器内存中."
我想这意味着,当我访问HttpPostedFileBase我的控制器,当我访问HttpPostedFileBase的InputStream财产,我可以写某个文件缓冲区,而不必担心运行内存的服务器,这显然是一个不可行的解决方案.
这里有一些关于我如何处理每个传入文件的伪代码HttpPostedFileBase.
for(var i = 0; i< Request.Files.Count;i++)
{
var fileBase = Request.Files[i];
if (fileBase.ContentLength == 0)
{
continue;
}
// One thread per file
ThreadPool.QueueUserWorkItem(state =>
{
// Read from fileBase.InputStream
},
null);
}
Run Code Online (Sandbox Code Playgroud)
我的web.config的httpRuntime块如下所示:
<httpRuntime
executionTimeout="1200"
requestLengthDiskThreshold="2097151"
maxRequestLength="2097151"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100" />
Run Code Online (Sandbox Code Playgroud)
我的实现工作,多个文件按预期上传,除了服务器消耗缓冲整个有效负载所需的相同内存量.我必须假设InputStream正在缓冲所有内容.当我上传的文件多于我的内存时,它可以预测会崩溃OutOfMemoryException.这是上传800mb文件时内存峰值的图像.

我知道我可以使用Flash/Silverlight小部件或编写自定义HttpModule来截取上传并自己处理它们,但是如果HttpPostedFileMSDN说它做了什么(或者我做错了),当前的要求将完美无缺.