在从REST API返回错误时,我正在寻找有关良好实践的指导.我正在开发一个新的API,所以我现在可以采取任何方向.我的内容类型目前是XML,但我计划将来支持JSON.
我现在正在添加一些错误情况,例如客户端尝试添加新资源但已超出其存储配额.我已经使用HTTP状态代码处理某些错误情况(401用于身份验证,403用于授权,404用于普通错误请求URI).我查看了有福的HTTP错误代码,但400-417范围似乎没有报告特定于应用程序的错误.所以起初我很想用200 OK和特定的XML有效载荷返回我的应用程序错误(即付给我们更多,你将得到你需要的存储空间!)但是我停下来思考它并且似乎是肥皂(/耸耸肩恐怖).此外,感觉就像我将错误响应分成不同的情况,因为有些是http状态代码驱动而其他是内容驱动.
那么行业建议是什么?好的做法(请解释原因!)以及从客户端pov中,REST API中的哪种错误处理使客户端代码的生活更轻松?
我正在看MvcContrib网格组件,我很着迷,但同时被网格语法中使用的语法技巧击退:
.Attributes(style => "width:100%")
Run Code Online (Sandbox Code Playgroud)
上面的语法将生成的HTML的style属性设置为width:100%
.现在如果你注意,"风格"没有指定,是从表达式中参数的名称推断出来的!我不得不深入研究这个并发现"神奇"发生的地方:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,代码使用正式的编译时,参数名来创建属性名称 - 值对的字典.结果语法结构确实非常具有表现力,但同时也非常危险.lambda表达式的一般用法允许替换使用的名称而没有副作用.我在一本书中看到一个例子,说collection.ForEach(book => Fire.Burn(book))
我知道我可以用我的代码编写collection.ForEach(log => Fire.Burn(log))
,这意味着同样的事情.但是使用MvcContrib网格语法突然间,我发现代码主动查找并根据我为变量选择的名称进行分解!
这是C#3.5/4.0社区和lambda表达爱好者的常见做法吗?或者是一个我不应该担心的流氓一招特立独行?
任何人都可以为gbd推荐一个好的备忘单吗?我对windbg命令很有经验,我正在为lml(列表加载模块),〜*k(所有线程堆栈),ba(访问中断),dt(转储类型),dv(转储帧变量)寻找gdb等价物),sxe(设置SEH处理程序)等我知道不会有1比1的等价物,但我只需要大多数使用/有用的命令的简要总结.
我在数据库中有许多需要触发应用程序代码的操作.目前我正在使用数据库轮询,但我听说SQL Server Service Broker可以提供类似MSMQ的功能.
我已经在我的PC上安装了SQL Express,希望能够做一些创建表然后修改它们的做法.我在Visual Studio中编写了一个网页,基本上是从SQLEXPRESS中的表中选择SELECT*,但我永远无法使连接字符串起作用.请帮忙
我的连接字符串
"Data Source = localhost\SQLEXPRESS; Initial Catalog = test; User Id = xaa9-PC\xaa9; Password = abcd;"
错误信息:
查询是从tblCustomers中选择*其中username ='johndoe'错误是用户'x309-PC\x309'登录失败.
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.Exception:查询是从tblCustomers中选择*其中username ='johndoe'错误是用户'x309-PC\x309'登录失败.
我正在使用sql 2008全文搜索,我遇到严重的性能问题,具体取决于我如何使用Contains或ContainsTable.
下面是示例:(表一有大约5000条记录,table1上有一个覆盖索引,其中包含where子句中的所有字段.我试图简化语句,如果有语法问题,请原谅我.)
场景1:
select * from table1 as t1
where t1.field1=90
and t1.field2='something'
and Exists(select top 1 * from containstable(table1,*, 'something') as t2
where t2.[key]=t1.id)
Run Code Online (Sandbox Code Playgroud)
结果:10秒(非常慢)
场景2:
select * from table1 as t1
join containstable(table1,*, 'something') as t2 on t2.[key] = t1.id
where t1.field1=90
and t1.field2='something'
Run Code Online (Sandbox Code Playgroud)
结果:10秒(非常慢)
场景3:
Declare @tbl Table(id uniqueidentifier primary key)
insert into @tbl select {key] from containstable(table1,*, 'something')
select * from table1 as t1
where t1.field1=90
and t1.field2='something'
and Exists(select id from @tbl as tbl …
Run Code Online (Sandbox Code Playgroud) 我正在寻找研究论文或着作,将最长公共次序算法应用于SQL表以获得数据差异视图.关于如何解决表差异问题的其他方法也受到欢迎.挑战在于SQL表有这种令人讨厌的习惯,即相当大而且应用为文本处理而设计的简单算法可能会导致程序永无止境......
给一张桌子Original
:
Key Content
1 This row is unchanged
2 This row is outdated
3 This row is wrong
4 This row is fine as it is
Run Code Online (Sandbox Code Playgroud)
和表New
:
Key Content
1 This row was added
2 This row is unchanged
3 This row is right
4 This row is fine as it is
5 This row contains important additions
Run Code Online (Sandbox Code Playgroud)
我需要找出Diff
:
+++ 1 This row was added
--- 2 This row is outdated …
Run Code Online (Sandbox Code Playgroud) 我在存储过程中有一个char(8)变量格式化为ddmmyyyy(此值的质量和有效性未知且超出我的控制范围).将值移动到datetime变量的最有效方法是什么,如果它不是有效的datetime则抛出错误.
DECLARE @Source char(8)
DECLARE @Destination datetime
SET @Source='07152009'
--your solution here
SELECT @Destination
Run Code Online (Sandbox Code Playgroud)
这是我能想到的最佳方式:
DECLARE @Source char(8)
DECLARE @Temp varchar(10)
DECLARE @Destination datetime
set @Source='07152009'
SET @Temp=LEFT(@Source,2)+'/'+SUBSTRING(@Source,3,2)+'/'+RIGHT(@Source,4)
IF ISDATE(@Temp)!=1
BEGIN
RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination=@Temp
SELECT @Source AS Source, @Temp AS Temp, @Destination AS Destination
Run Code Online (Sandbox Code Playgroud)
编辑这里是我要去的...
DECLARE @Source char(8)
DECLARE @Destination datetime
set @Source='07152009'
BEGIN TRY
SET @Destination=CONVERT(datetime,RIGHT(@Source,4) -- YYYY
+LEFT(@Source,2) -- MM
+SUBSTRING(@Source,3,2) -- DD
)
END TRY
BEGIN CATCH
PRINT 'ERROR!!!' --I'll add a little …
Run Code Online (Sandbox Code Playgroud) 我正在使用EventMachine和Monetarily来启动e TCP服务器以及我的rails应用程序.这是从config/initializers/momentarily.rb
.
我的问题是,当我运行rake任务时,它也会启动db:migrate
.我只想在启动HTTP服务器时启动它.环境无济于事,因为服务器启动和rake任务都在开发环境下.有没有办法知道应用程序正在运行HTTP服务器而不是其他任何东西?请注意,不仅是rake任务,如果我运行rails控制台,EM也会启动,这对我的情况来说也是不可取的.
sql-server ×4
.net ×1
algorithm ×1
asp.net-mvc ×1
c# ×1
css ×1
debugging ×1
diff ×1
eventmachine ×1
gdb ×1
http ×1
lambda ×1
mvccontrib ×1
performance ×1
rake ×1
rest ×1
ruby ×1
sql ×1
t-sql ×1
web-services ×1
xcode ×1