我正在使用ASP.NET Web API开发一个全新的REST API.来自WCF背景,我觉得为我的API创建"错误契约".
在这种情况下,我不是在谈论返回给客户端的未处理异常.相反,我专注于错误,例如客户端不正确地使用API - 尤其是客户端可以自动创建这些错误并重新提交请求的错误.
我发现大多数示例都返回一个字符串,通常是抛出一个HttpResponseException,或者至少做一些事情来使构建信息错误字符串的过程更加自动化:在Web API中返回自定义错误对象
我正在考虑创建一个HttpResponseException,传入一个HttpResponseMessage,其内容设置为我的特定错误契约类型.
我的API也在大量使用自动模型验证,并且这些模型验证错误又以完全不同的结构形式出现.
那么我应该将"错误"强制为与模型验证响应相同的格式吗?这里的最佳做法是什么?
最后,我的API将公开json,xml和协议缓冲区的格式化选项.因此,我确实需要确保我的策略与格式化程序无关.
编辑:已更新,指定仅在打包Azure云服务CSPKG文件时才会出现此问题.
我有一个ASP.NET Web API 2应用程序,它充当Azure云服务解决方案中的Web角色.我想使用Web API帮助页面并利用XML生成的文档来填充它们.我无法弄清楚如何将XML文档包含在Web Api项目的Azure云包中.
XML文档在本地正确地进入bin目录,并且在发布到文件系统位置时,但在检查cspkg存档或已部署的Web角色approot目录时,它会丢失.
有没有办法强制打包包含XML?
我需要覆盖Internet Explorer中托管的.NET组件的一些设置.我创建了一个iexplore.exe.config文件并将其放在c:\ program files\internet explorer中.
以下是配置文件:
<configuration>
<system.net>
<webRequestModules>
<remove prefix="http:"/>
<remove prefix="https:"/>
<add prefix="http:" type="MyHttpRequestCreator, MyRequestModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bee8bd1bab54ad99" />
<add prefix="https:" type="MyHttpRequestCreator, MyRequestModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bee8bd1bab54ad99" />
</webRequestModules>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
不幸的是,IE似乎完全忽略了这一点.即使我在文件中放入了无效文本,也不会记录任何错误.
如果我将它添加到machine.config,这个相同的配置工作得很好,但我想尽可能将我的覆盖限制为IE.
我尝试启用IEHostLogFile(参见:http://support.microsoft.com/kb/313892),这给了我一些有趣的条目.它表明正在加载远程配置文件:
Microsoft.IE.SecureFactory: Added configuration file: DotNetConfig.xml
Microsoft.IE.SecureFactory: Application base: http://someserver/dotnet/
Microsoft.IE.SecureFactory: Private Bin Path: bin
Microsoft.IE.IDKey: Created key
Microsoft.IE.SecureFactory: Trying to create instance of type http://someserver/dotnet/
SomeApp.DLL#SomeApp.SomeClass
...
Run Code Online (Sandbox Code Playgroud)
我检查了配置文件,并没有覆盖system.net部分,所以我仍然可以提供我的覆盖.我可以尝试修改该文件,但这个解决方案对我不起作用,因为我不希望每个使用此应用程序的人都受到影响,只是特定的机器.
想法?
我很有兴趣收集一个我没写过但无法控制的应用程序的使用指标.这是在Windows上运行的应用程序.
我的计划是为鼠标和键盘事件注册一个全局窗口挂钩,并为具有预定标题或其他可识别属性的窗口记录这些事件.
使用这些数据,我希望能够确定用户如何使用相关应用程序.他们点击什么按钮以及什么时候,以及常见的工作流程.等等.
对这个想法的任何想法?是否有第三方产品或库,将有助于该解决方案,也没有要求现有应用程序的修改?
我一直试图在IIS 7下的Windows 7机器上安装Umbraco.我能够使用Web平台安装程序通过WebMatrix启动并运行,但我想在IIS中运行它.
无论我是通过设置新的网站复制二进制文件来手动执行安装,还是让我让Web平台安装程序执行此操作,我总是会看到一个缺少所有CSS,图像,js等的安装页面.
当我尝试直接点击这些资源时,我总是被重定向回安装页面.
我告诉平台安装程序创建一个全新的网站.没有指定虚拟目录/应用程序名称.我已经按照我能找到的所有在线指示进行了跟踪.
日志显示401未经授权的错误:
2012-05-11 02:42:22 127.0.0.1 GET /umbraco_client/installer/css/all.css - 80 - 127.0.0.1 Mozilla/5.0 +(兼容; + MSIE + 9.0; + Windows + NT + 6.1; + WOW64; + Trident/5.0)401 3 5 10 2012-05-11 02:42:22 127.0.0.1 GET /umbraco_client/installer/css/reset.css - 80 - 127.0.0.1 Mozilla/5.0 +(兼容; + MSIE +9.0; + Windows + NT + 6.1; + WOW64; + Trident/5.0)401 3 5 10 2012-05-11 02:42:22 127.0.0.1 GET /umbraco_client/installer/css/form.css - 80 - 127.0 .0.1 Mozilla/5.0 +(兼容; + MSIE + 9.0; + Windows …
我最近升级到VS.NET 2012,在调试时我开始遇到一个非常令人沮丧的问题.
项目A有项目B的项目引用.当我编辑项目B时,我希望构建/调试项目A的操作能够检测项目B中的更改并在项目A的构建期间自动包含它.(这有点重点项目依赖项.)这正是VS 2010中常见的情况.
但这不会发生在2012年.事实上,即使我明确地构建了项目B,项目A也不会接受这种改变,除非我重建项目A.
所以现在我被迫显式构建项目B然后返回到项目A并明确重建它以便包含项目B中的修改.
思考?
我在 SQL Azure DB(2019 兼容级别)中有一个具有以下架构的表:
CREATE TABLE dbo.Properties
(
PropertyId int,
PropertyName nvarchar(100),
PropertyValue nvarchar(1000)
)
Run Code Online (Sandbox Code Playgroud)
我想获取此表中的数据,并将其转换为 JSON,使用 PropertyName 列中的值作为 JSON 属性的名称,显然使用 PropertyValue 值作为 JSON 属性值。
编辑 12/10/2021: 重要的是,PropertyName 列中的值无法提前预测。
例如,考虑表中的数据(3 行):
1, "Color", "Blue"
1, "Name", "John"
1, "Cost", 5
Run Code Online (Sandbox Code Playgroud)
上面的内容将转换为以下 JSON:
{"Color":"Blue", "Name":"John", "Cost":5}
Run Code Online (Sandbox Code Playgroud)
显然我可以使用 STRING_AGG 函数来做到这一点,如下所示:
SELECT '{' + STRING_AGG( '"' + p.PropertyName + '": ''' + p.PropertyValue,''',')
WITHIN GROUP (ORDER BY p.PropertyName) + '}' AS MyJson
FROM dbo.Properties p
GROUP BY p.Id
Run Code Online (Sandbox Code Playgroud)
但我希望使用 JSON 函数中的一个构建,而不是拼凑一个大字符串。
数据库是SQL Server 2008.我有一个查询从一个或多个表中提取行,然后尝试将它们插入表变量.
我想要一种有效的方法来防止重复插入,所以我想出的是:
INSERT INTO @MyTableVariable
SELECT SomeID
FROM SomeTable st
INNER JOIN SomeOtherTable sot ON sot.SomeID = st.SomeID
LEFT JOIN @MyTableVariable t ON t.SomeID = sot.SomeID
WHERE t.SomeID IS NULL
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不能防止在某些情况下重复插入.
似乎(如果你仔细考虑并查看查询计划,这是有道理的)在左连接操作中只使用@MyTableVariable的初始"状态".换句话说,如果在运行此语句之前@MyTableVariable已经有SomeID,这将防止重复,但如果SomeTable/SomeOtherTalbe上的FROM/INNER JOIN导致重复的SomeID,则不会阻止重复.
除了简单地在SELECT语句上打一个DISTINCT之外,还有另一种更有效的方法来处理它吗?
我正在使用TFS 2012来自动构建包含多个Windows服务和两个Web应用程序的解决方案.
我使用了我在这里找到的指南来自定义构建过程模板,以便将windows服务放在我喜欢的文件夹结构中.特别:
这很好用,但不幸的是它不适用于Web应用程序.如果我使用相同的策略,我只是获取每个Web应用程序的/ bin内容,而不是完整的站点内容.
MSBuild通常使用Web应用程序目标来处理此问题,但由于某种原因,当您按我自定义构建时,这不起作用.我不再在构建输出中获得_PublishedWebSites文件夹.(我猜这是因为我清除了MSBuild任务的OutDir属性.)
有没有人做过这样的事情,并让它与Web应用程序一起工作?
有没有办法通过服务器端ASP.NET MVC包装器为Kendo UI Grid定义parameterMap选项?
我需要在向服务器发送过滤器命令之前将本地时间更改为UTC时间,这似乎是唯一的方法.
msbuild ×3
t-sql ×2
tfs ×2
.net ×1
app-config ×1
asp.net-mvc ×1
azure ×1
hook ×1
iis ×1
insert ×1
json ×1
kendo-grid ×1
kendo-ui ×1
sql-server ×1
team-build ×1
tfs2012 ×1
tracking ×1
umbraco ×1
windows ×1