对于我的大多数项目,我都有以下约定:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Run Code Online (Sandbox Code Playgroud)
你会注意到,我没有保持外部库中的源文件夹.我也对使用NuGet非常感兴趣,但不希望在源文件夹中使用这些外部库.NuGet是否有设置来更改所有包加载到的目录?
我的网站托管在与使用该应用程序的用户不同的时区.除此之外,用户还可以拥有特定的时区.我想知道其他SO用户和应用程序如何处理这个问题?最明显的部分是在DB内部,日期/时间以UTC格式存储.在服务器上时,所有日期/时间都应以UTC格式处理.但是,我看到了我要克服的三个问题:
以UTC格式获取当前时间(轻松解决DateTime.UtcNow
).
从数据库中提取日期/时间并将其显示给用户.可能有很多调用在不同视图上打印日期.我在考虑可以解决这个问题的视图和控制器之间的某个层.或者有自定义扩展方法DateTime
(见下文).主要的缺点是在视图中使用日期时间的每个位置,必须调用扩展方法!
这也会增加使用类似的东西的难度JsonResult
.你不能再轻易打电话了Json(myEnumerable)
,它必须是Json(myEnumerable.Select(transformAllDates))
.也许AutoMapper可以在这种情况下提供帮助?
从用户获取输入(本地到UTC).例如,使用日期发布表单需要将日期转换为UTC.首先想到的是创建一个自定义ModelBinder
.
这是我想在视图中使用的扩展:
public static class DateTimeExtensions
{
public static DateTime UtcToLocal(this DateTime source,
TimeZoneInfo localTimeZone)
{
return TimeZoneInfo.ConvertTimeFromUtc(source, localTimeZone);
}
public static DateTime LocalToUtc(this DateTime source,
TimeZoneInfo localTimeZone)
{
source = DateTime.SpecifyKind(source, DateTimeKind.Unspecified);
return TimeZoneInfo.ConvertTimeToUtc(source, localTimeZone);
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到很多应用程序现在都是基于云的,服务器的本地时间可能与预期的时区差别很大,我认为处理时区会是如此常见.
以前优雅地解决了吗?有什么我想念的吗?非常感谢您的想法和想法.
编辑:为了清除一些混乱,我想添加更多细节.现在的问题不是如何在数据库中存储UTC时间,而是更多关于从UTC-> Local和Local-> UTC的过程.正如@Max Zerbini所指出的那样,将UTC-> Local代码放在视图中显然很聪明,但是DateTimeExtensions
真的使用了答案吗?当从用户那里获得输入时,接受日期作为用户的本地时间(因为这是JS将使用的)然后使用a ModelBinder
转换为UTC是否有意义?用户的时区存储在数据库中,可以轻松检索.
在我正在创建的MVC项目中,我有以下内容RequirePermissionAttribute
可以放在需要特定权限的任何操作上(本例中已简化):
public class RequirePermissionAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public Operation Permissions { get; set; }
public RequirePermissionAttribute() { }
public RequirePermissionAttribute(Operation permissions)
{
this.Permissions = permissions;
}
public bool AuthorizeCore(HttpContextBase httpContext)
{
IAuthorizationService authServ = new ASPNETAuthorizationService();
return authServ.Authorize(httpContext);
}
public void OnAuthorization(AuthorizationContext filterContext)
{
Enforce.ArgNotNull(filterContext);
if (this.AuthorizeCore(filterContext.HttpContext))
{
// code snipped.
}
else
{
// code snipped.
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题显然是我的authorize属性依赖于ASPNETAuthorizationService
我创建的属性.我不能去构造函数方式,因为属性是编译时检查的.
有一点需要提及的是,我正在使用自己制作的小IoC,并且它还没有支持属性注入(尚未).当然,如果我确实去了房产注入路线,我必须增加对它的支持(我必须做一些研究).
将某些东西注入属性类的最佳方法是什么?
我试图避免使用角色提供者和成员资格提供者,因为在我看来它过于笨拙,因此我正在尝试制作我自己的"版本",它不那么笨拙,更易于管理/灵活.现在是我的问题..角色提供者有替代方案吗?(我知道我可以做自定义角色提供者,会员提供者等)
通过更易于管理/灵活,我的意思是我只能使用Roles静态类而不是直接实现到与数据库上下文交互的服务层,而是我必须使用具有自己的数据库上下文的Roles静态类等,表名也很糟糕..
提前致谢.
asp.net authentication asp.net-mvc authorization asp.net-membership
我不太确定这是否可行,所以我转向你.
我想找到一个正则表达式,它将挑选掉所有引号集之外的逗号.
例如:
'foo' => 'bar',
'foofoo' => 'bar,bar'
Run Code Online (Sandbox Code Playgroud)
这将在第1行中选出单个逗号 'bar',
我真的不关心单引号和双引号.
有没有人有任何想法?我觉得这应该可以用readaheads,但我的正则表达式太弱了.
ASP.NET中会话ID的默认cookie名称是ASP.NET_SessionId
.也可以将此名称更改为其他类似名称<sessionState cookieName="FooBar" />
.
是否有成员可以轻松访问此名称FormsAuthentication.FormsCookieName
?
有人可以帮我弄这个吗?我正在烤蛋糕,我想要红宝石的代码说"生日快乐Josh"的结冰.
有人能提出一些想法吗?Josh是我的兄弟,是一个狂热的程序员.
我真的很感激 :)
我有一个MVC3项目,我从VS2010升级到VS2012.该项目也有参考MiniProfiler
.我们的应用程序在VS2012中编译并运行良好,没有任何警告/错误.使用IIS Express运行时,两个程序集都可以正常加载 但是,在使用ASP.NET编译器工具时,我收到以下警告:
Microsoft(R)ASP.NET编译工具版本4.0.30319.17929预编译ASP.NET应用程序的实用程序版权所有(C)Microsoft Corporation.版权所有.
(0):警告:以下程序集依赖于高于目标的.NET Framework版本,并且可能在运行时导致失败时无法正确加载:MiniProfiler,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = b44f9351044011a3.依赖项为:System.Data.Linq,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089.您应该确保依赖程序集对于目标框架是正确的,或者确保要处理的目标框架是从属程序集的目标框架.
我们没有明确的参考System.Data.Linq
.直到VS2012更新,我们没有任何错误.该MiniProfiler
版本确实以.NET 4.0为目标(我们的应用程序也是如此).可能导致此警告的原因是什么?
每次我使用Math.Round/Floor/Ceiling
我总是施放int
(或者long
如果必要的话).double
如果它总是返回一个整数,为什么它们会返回.
尽管未选中"启用编辑并继续",仍会出现此问题: