我总是最终需要用户在我工作的大多数Web项目上的位置.我使用过Maxmind的GeoIp,但它涉及到导入数据集,需要不断更新.还有其他免费和付费服务,但我只想要一些简单的东西,我可以在几秒钟内添加到任何网站.
所以这有点诱饵,因为我有一个简单的解决方案,详情如下,但我想看看是否有其他人使用这种技术,是否有更好的解决方案或是否有一些无法预料的陷阱.
我有一个Linq查询,它基本上计算在特定日期创建的条目数,这是通过按年,月,日进行分组来完成的.问题是,因为有些日子没有任何条目我需要用0计数的条目来填补缺少的"日历日".我的猜测是,这可能是通过联盟或其他东西完成的,或者甚至可能是一些简单的for循环来处理查询后的记录.
这是查询:
from l in context.LoginToken
where l.CreatedOn >= start && l.CreatedOn <= finish
group l by
new{l.CreatedOn.Year, l.CreatedOn.Month, l.CreatedOn.Day} into groups
orderby groups.Key.Year , groups.Key.Month , groups.Key.Day
select new StatsDateWithCount {
Count = groups.Count(),
Year = groups.Key.Year,
Month = groups.Key.Month,
Day = groups.Key.Day
}));
Run Code Online (Sandbox Code Playgroud)
如果我有12/1 - 12/4/2009的数据(简化):
12/1/2009 20
12/2/2009 15
12/4/2009 16
Run Code Online (Sandbox Code Playgroud)
我希望通过代码添加12/3/2009 0的条目.
我知道通常这应该在数据库中使用非规范化表来完成,您可以使用数据填充或加入日历表,但我的问题是如何在代码中完成此操作?
可以在Linq完成吗?应该在Linq完成吗?
我的网站的一部分有一个轻量级的xml/json REST API.我的大部分网站都在表单身份验证后面,但只有部分API操作需要身份验证.
我有一个用于我的API的自定义AuthorizeAttribute,用于检查某些权限,当它失败时会产生401.一切都很好,除非我使用表单auth,Asp.net方便地将其转换为302重定向到我的登录页面.
我已经看到一些以前的问题,似乎有点hackish要么返回403,要么在global.asax protected void Application_EndRequest() 中放入一些逻辑 ,它将基本上将302转换为401,满足任何条件.
我现在正在做的有点像其中一个问题,但不是检查Application_EndRequest()的302,而是让我的authorize属性返回666,这表明我需要将它设置为401.
这是我的代码:
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == MyAuthAttribute.AUTHORIZATION_FAILED_STATUS)
{
//check for 666 - status code of hidden 401
Context.Response.StatusCode = 401;
}
}
Run Code Online (Sandbox Code Playgroud)
即使这有效,我的问题是Asp.net MVC 2中有什么东西会阻止我这么做吗?或者,总的来说有更好的方法吗? 我认为对于任何做REST api的人或只是在他们的控制器中执行ajax请求的人来说,这会有很多.你想要的最后一件事是做一个请求并获取登录页面的内容而不是json.
我有一个简单的局部视图,我在主视图中渲染:
@Html.Action("All", "Template")
Run Code Online (Sandbox Code Playgroud)
在我的控制器上我有这个:
[OutputCache(CacheProfile = "Templates")]
public ActionResult All()
{
return Content("This stinks.");
}
Run Code Online (Sandbox Code Playgroud)
在我的配置中:
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<clear/>
<add name="Templates" duration="3600" varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
<outputCache enableOutputCache="false" enableFragmentCache="false" />
</caching>
Run Code Online (Sandbox Code Playgroud)
这将在运行时失败,但有异常:
执行处理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper的子请求时出错
内在异常:
持续时间必须是正数
现在显然它没有拿起我的web.config设置,因为如果我将其更改为:
[OutputCache(Duration = 3600)]
Run Code Online (Sandbox Code Playgroud)
它会工作,而且在我的web.config通知我关掉enableOutputCache和enableFragmentCache,但它不支持这些设置.
奇怪的是,在普通视图中这些设置工作正常,那么部分视图是什么打破了这个呢?我错过了什么吗?顾说这应该工作得很好...... 总之,它是否应该尊重web.config中的缓存设置,如果没有,为什么不呢?
我从roozz.com看到了浏览器插件,我用LinqPad 试了一下, 试试吧.他们说有一个转换过程基本上需要任何exe并将其转换为他们的平台,然后可以通过所有主流浏览器在windows,mac,linux上运行.
当我挖掘正在发生的事情时,至少对于Windows 7上的LinqPad来说,它所做的只是将linqpad exe下载到我的用户AppData/Local文件夹并将其托管在chrome中.有趣的是,我可以在浏览器外部启动exe并正常运行它.我甚至能够卸载Roozz插件并继续像平常一样启动应用程序.
我有的主要问题.
编辑: 只是为了清理,这不是关于浏览器插件通常如何工作,而是如何运行专门为一个平台编写的应用程序并在不兼容的平台上运行.
进一步的测试显示,他们的声明中存在一些BS,或者至少有一些令人困惑的"炒作",因为LinqPad实际上并不适用于MacOSx.当你试图运行应用程序时,
"你的操作系统尚未得到Roozz平台的支持.但我们正在努力."
我发现有几个地方人们说它不受支持,但我找不到根本原因.
我最近发现这个针对nHibernate的补丁可以解决这个问题,有没有人验证过这个解决方法?
还有其他不受支持的解决方法吗?
给定如下的简单投影,NHibernate将缓存查询计划,而不是在查询相同时更新变量的值:
int argValue = 1;
var result1 = database.Users.Select(x => new {x.Name, BadArg = argValue}).First();
argValue = 2;
var result2 = database.Users.Select(x => new {x.Name, BadArg = argValue}).First();
Run Code Online (Sandbox Code Playgroud)
预期
result1值为Name ="Bob",BadArg = 1
result2值为Name ="Bob",BadArg = 2
实际
result1值为Name ="Bob",BadArg = 1
result2值为Name ="Bob",BadArg = 1
显然,如果你不期待它,这会导致许多疯狂的行为.我在NHibernate的bug跟踪中看到过类似的错误报告,但自去年五月以来一直没有采取任何行动.因此,要么没有人使用Linq来进行Nhibernate,要么有一些我不知道的解决方法.
在深入了解NHibernate源代码之前,是否有办法禁用查询计划缓存以防止此行为或其他一些变通方法,或者是否有人应用上述链接中的补丁?
注意
这个例子是为了让问题保持简单,实际上我有一个复杂的投影,我想保留为IQueryable,过早转换为IEnumerable将无法正常工作.
更新 在Nhibernate 3.2.1的github master中不起作用
刚刚开始使用SlickGrid并且它似乎没有像普通的jquery小部件/插件一样启动它,你可以通过执行$(element).slickgrid()来访问附加到元素的实例.
有没有办法获得现有实例,而在创建时却没有明显地保留它?查看代码看起来并不像,但不确定是否还有其他人遇到此问题.
不完全确定为什么他们依赖于jquery但决定进行自定义初始化.
可以像将它包装在jqueryui小部件中一样简单.
我正在设计RESTful API,使用API的系统代表用户工作.
我们使用标准OAuth交换来验证该用户,但在验证后,我们可能会发现用户需要在允许任何其他方法之前接受更新的用户协议.想想iPhone以及他们如何改变协议并要求用户接受.
什么状态代码最能代表这种情况?他们是否应该获得401附加信息.重定向?400系列中的自定义代码?
显然,我不希望API使用者认为他有一个有效的令牌,但他们需要知道应该采取具体的行动.
有没有人处理过这样的事情?
.net ×3
asp.net-mvc ×2
c# ×2
linq ×2
nhibernate ×2
rest ×2
ado.net ×1
api ×1
caching ×1
datetime ×1
geolocation ×1
group-by ×1
http ×1
iis ×1
javascript ×1
jquery ×1
mysql ×1
slickgrid ×1