虽然我没有看到任何受此影响的功能或jquery UI元素,但是当我访问我的asp.net mvc网页时,Chrome开发者控制台会记录一堆错误消息,如下所示:
资源解释为图像但使用MIME类型application/octet-stream传输.
所有警告都是针对jquery UI图像的(虽然我没有任何自定义图像,所以我不知道它是否只是jquery UI).所有jquery图像仍然正确加载.
有没有人知道为什么会这样?
asp.net-mvc asp.net-development-serv mime-types google-chrome-devtools
我一整天都在努力在我的ASP.NET MVC 2应用程序中实现错误处理.我看过各种各样的技术,但都没有正常工作.我正在使用MVC2和.NET 4.0(在MVC3发布之前启动项目;我们将在发布初始版本后进行升级).
在这一点上,我将很乐意正确处理404和500错误 - 403(需要授权)也会很好,其次是各种其他特定的响应.现在,我得到所有404,全部500,全部302在404之前,或者全部302在500之前.
这是我的要求(应该非常接近HTTP的基本要求):
如果找不到资源,则抛出404,并显示包含所请求URL的特定于404的页面.不要返回像302这样的中间响应代码.理想情况下,保留请求的URL,而不是显示新的URL /Error/NotFound
,但如果显示后者,请确保我们没有返回重定向响应来获取它.
如果发生内部服务器错误,则抛出500,并显示500特定错误,并指出出现了什么问题.同样,不要返回中间响应代码,理想情况下不要更改URL.
这是我认为的404:
/Content/non-existent-dir/non-existent-file.txt
/non-existent-controller/Foo/666
/Home/non-existent-action/666
/Home/Login/non-existent-id
这是我认为的500:
POST /User/New/new-user-name-too-long-for-db-column-constraint
其中一些问题需要由特定的控制器或模型识别,然后控制器应抛出适当的HttpException.其余的应该更一般地处理.
对于404情况#2,如果找不到控制器,我尝试使用自定义ControllerFactory来抛出404.对于404#3案例,我试图使用自定义基本控制器来覆盖HandleUnknownAction
并抛出404.
在这两种情况下,我在404之前得到302.而且,我从来没有得到500个错误; 如果我修改Web.config以在我的Web服务端点中输入拼写错误,我仍然得到302,然后404表示无法找到使用 Web服务的URL(控制器/操作).我还将请求的URL作为(不需要的)查询字符串参数获取:/Error/NotFound?aspxerrorpath=/Home/non-existent-action
这两种技术都来自http://www.niksmit.com/wp/?p=17(如何使用ASP.Net MVC获取正常的404(找不到页面)错误页面),来自http:// richarddingwall .名称/ 2008/08/17 /为基础的战略,为资源-404-错误-在-ASPNET-MVC /
如果在我的Web.config中<customErrors mode="On" defaultRedirect="~/Error/Unknown" redirectMode="ResponseRedirect" />
,我得到了相应的响应代码,但我的错误控制器永远不会被调用.取出redirectMode
属性可以获得MVC错误视图,但是介入302和更改的URL - 并且始终是相同的控制器(Unknown
= 500;如果我将其更改为NotFound
一切看起来像404).
以下是我已阅读并尝试实施的其他一些内容:
..以及一堆StackOverflow帖子.
在我看来,这种错误处理对于Web应用程序来说是非常基本的,并且MVC框架应该具有开箱即用的默认设置,并且让人们将其扩展为其他工作.也许他们会在将来的版本中做到这一点.在此期间,有人可以向我提供有关如何实施正确HTTP响应的全面详细信息吗?
没错,第十个条件列问题:
我正在编写一个存储过程,它接受一个映射到几个标志列之一的输入参数.筛选请求列的最佳方法是什么?我目前正在使用SQL2000,但即将转向SQL2008,所以如果可以的话,我会采用现代解决方案.
在sproc中查询的表格看起来像
ID ... fooFlag barFlag bazFlag quuxFlag
-- ------- ------- ------- --------
01 1 0 0 1
02 0 1 0 0
03 0 0 1 1
04 1 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想做点什么
select ID, name, description, ...
from myTable
where (colname like @flag + 'Flag') = 1
Run Code Online (Sandbox Code Playgroud)
所以,如果我打电话给exec uspMyProc @flag = 'foo'
我,我会回到第1和第4行.
我知道我不能直接在SQL中用parens做这个部分.为了做动态SQL,我必须将整个查询填充到一个字符串中,在WHERE子句中连接@flag param,然后执行字符串.除了在进行动态SQL时我得到的肮脏感觉,我的查询相当大(我选择了几十个字段,加入了5个表,调用了几个函数),所以它是一个巨大的字符串,因为一行在3行WHERE过滤器中.
或者,我可以有4个查询副本,并在CASE语句中选择它们.这使得SQL代码可以直接执行(并且受语法高亮等影响)但是以重复大块代码为代价,因为我不能仅在WHERE子句上使用CASE.
还有其他选择吗?可以应用任何棘手的连接或逻辑操作?或者我应该克服它并执行动态SQL?
我刚开始使用Christian Bach优秀的TableSorter插件,我需要获得列的当前排序方向.我有几个专栏:
ID和名称设置为不可排序使用
headers: { 0: {sorter: false}, 1: {sorter: false} }
Run Code Online (Sandbox Code Playgroud)
我在Name上添加了一个click处理程序,以便它在Category列上触发sort事件.使用示例" 使用表外链接对表进行排序 ",我可以获取Name标题来触发Category排序 - 但它是硬编码的,可以在一个方向排序.
如何让它查看"类别"列当前排序的当前方向,并按相反的方向排序?(我可以处理翻转值;因为排序顺序为0或1,我可以对该值进行异或,以获得相反的结果,比如var sort; sort ^= sort;
- 我的问题是如何获取当前值.
这是当前在Name列上设置click处理程序的代码:
$("#nameCol").click(function() {
var sorting = [[2, 0]]; /* sort 3rd col (Category) descending */
$("#SearchResults").trigger("sorton", [sorting] ); /* SearchResults is the ID of the sortable table */
return false; /* cancel default link action on a#nameCol */
});
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在编写一个类来封装一些业务规则,每个规则都由一个布尔值表示.该类将用于处理InfoPath表单,因此规则通过使用XPath操作在全局XML数据结构中查找值来获取当前程序状态.将这些规则暴露给调用者 - 属性或公共方法的最佳(最惯用)方法是什么?
使用属性调用
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval ) {
// get approval
} else {
// skip approval
}
Run Code Online (Sandbox Code Playgroud)
使用方法调用
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval() ) {
// get approval
} else {
// skip approval
}
Run Code Online (Sandbox Code Playgroud)
规则类将规则公开为属性
public class Rules() {
private int _amount;
private int threshold = 100;
public Rules() {
_amount = someExpensiveXpathOperation;
}
// rule property
public bool ProjectRequiresApproval {
get { return _amount > threshold }
} …
Run Code Online (Sandbox Code Playgroud) 我在使用我可用的任何MS调试环境调试工作站上的任何ASP Classic网站时遇到问题.我在Win XP SP3上,使用内置的IIS 5.1.
它开始于几个星期前,发生在多个项目中.在我的环境中有一些明显的变化,因为它在过去工作正常,即使在最近的IDE中,只要我附加到进程.然后它打破了如下所述.我已经放弃了,但我最近开始研究一个新项目,尝试调试并且有效!但是今天,它又回到了同样破碎的行为:
当我尝试设置断点时,IDE实际上将点设置在我单击的行的上方或下方几行.我试图在完全是服务器端代码的行上设置断点,所以这不是因为它在嵌入代码块的HTML之前或之后跳过.偶尔它不会设置断点,给我一个空心的断点图标并显示一条错误,表示该行没有可执行代码.
当我附加到IIS进程(inetinfo.dll,因为我在低隔离模式下运行)时,断点可能不会被命中.如果是,并且我开始单步执行,则选定的线会跳转,并且不会落在源中的每个连续线上,也不会按预期方式跟随控制结构.监视的变量未按预期更新.它显然看到的代码与我对相同行号不同.
无论我是否在浏览器中加载页面,都会发生相同的行为
似乎源代码与调试器逐步完成的内容不同步.我已确定在VS>工具>选项>调试>常规中设置了"要求源文件与原始版本完全匹配"
当然,这些是ASP Classic站点 - 没有编译代码,因此我在IDE中看到的源应该与调试器执行的源相同.它不是特定于一个项目 - 它至少发生在至少两个完全独立的项目上.并且,它发生在多台机器上 - 我将我的项目部署到测试服务器并尝试在那里进行调试,并获得相同的行为.
我发现了一些有关UTF编码文件的相似声音问题的信息,这些文件包含非ANSI字符(你知道,你使用Unicode支持的那些!),这里,这里和这里,但是我通过我的源代码找不到这样的任何文件.
有任何想法吗?谢谢!
我觉得我错过了一些非常基本的东西,但我无法使用下拉菜单来工作,因为我期望使用Knockout.js.
我有一组要在菜单中显示的对象,我需要找到所选的选项并将其发布到服务器.我可以让菜单渲染,但似乎无法获得所选项目的值.我的视图模型如下所示:
function ProjectFilterItem( name, id ) {
this.Name = name;
this.Id = id;
}
function FilterViewModel() {
this.projectFilters = ko.observableArray([
new ProjectFilterItem( "foo", "1" ),
new ProjectFilterItem( "bar", "2" ),
new ProjectFilterItem( "baz", "3" )
]);
this.selectedProject = ko.observable();
}
ko.applyBindings( new FilterViewModel() );
Run Code Online (Sandbox Code Playgroud)
我的视图标记看起来像这样:
<select
id = "projectMenu"
name = "projectMenu"
data-bind = "
options: projectFilters,
optionsText: 'Name', /* I have to enquote the value or I get a JS error */
optionsValue: 'Id', /* If I put …
Run Code Online (Sandbox Code Playgroud) 好的,我知道已经提出并回答了对此的各种变化; 我整天都在读它们,但我仍然被卡住了.所以,这里是:
我需要从一些XML创建HTML的摘要列表.
鉴于此XML:
<Root><!-- yes, I know I don't need a 'Root' element! Legacy code... -->
<Plans>
<Plan AreaID="1" UnitID="83">
<Part ID="9122" Name="foo" />
<Part ID="9126" Name="bar" />
</Plan>
<Plan AreaID="1" UnitID="86">
<Part ID="8650" Name="baz" />
</Plan>
<Plan AreaID="2" UnitID="26">
<Part ID="215" Name="quux" />
</Plan>
<Plan AreaID="1" UnitID="95">
<Part ID="7350" Name="meh" />
</Plan>
</Plans>
</Root>
Run Code Online (Sandbox Code Playgroud)
我需要发出:
<ol>
<li>Area 1:
<ol><!-- units in Area 1 -->
<li>Unit 83:
<ol>
<li>Part 9122 (foo)</li>
<li>Part 9126 (bar)</li>
</ol>
</li>
<li>Unit 86:
<ol> …
Run Code Online (Sandbox Code Playgroud) 我对REST原则非常熟悉,并阅读了相关的论文,维基百科条目,一堆关于这个主题的博客文章和StackOverflow问题,但仍然没有找到一个简单的常见案例答案:
我需要请求显示资源.根据资源的状态,我需要呈现只读或可编辑的表示.在这两种情况下,我都需要获取资源.如何构建URL以获取只读或可编辑的版本?
如果我的用户跟随链接GET /resource/<id>
,那就足以向我表明他/她需要只读表示.但是,如果我需要为可编辑的表单提供服务,该URL看起来像什么?GET /resource/<id>/edit
很明显,但它在URL中包含一个动词.改变这一点来GET /resource/<id>/editable
解决这个问题,但在一个看似肤浅的层面.这就是它的全部 - 将动词改为形容词吗?
如果我使用POST来检索可编辑的版本,那么如何区分最初检索它的POST和保存它的POST?使用POST的我(弱)借口是检索可编辑的版本会导致服务器上的状态更改:锁定资源.但是,只有在我的要求是实现这样的锁定时才有效,但情况并非总是如此.PUT因同样的原因失败,加上我正在运行的Web服务器默认不启用PUT,因此有实际原因不使用它(和DELETE).
请注意,即使在可编辑状态下,我还没有做任何更改; 大概是当我再次将资源提交给Web服务器时,我会发布它.但是为了得到我以后可以POST的东西,服务器必须首先提供特定的表示.
我想另一个办法是在集合级别有不同的资源:
GET /read-only/resource/<id>
和GET /editable/resource/<id>
或GET /resource/read-only/<id>
和GET /resource/editable/<id>
...但是这看起来很丑陋给我.
思考?
我有一个用于文件上传的 API,需要提交多部分表单。但我有一个客户正在编写一个客户端,他的系统无法正确生成请求multipart/form-data
。他要求我修改 API 以接受请求中的文件application/x-www-form-urlencoded
,文件名位于一个键/值对中,文件内容(base64 编码)位于另一个键/值对中。
原则上我可以轻松做到这一点(尽管之后我需要淋浴),但我担心尺寸限制。我们预计生产中的文件将相当大:5-10MB,有时高达 20MB。我找不到任何关于表单 POST 内单个键/值对数据的长度限制的信息,无论是在规范中(我已经查看了 HTTP规范和Forms 规范等)还是在特定的实现中(我的 API 运行在 Java 应用程序服务器 Jetty 上,前面有一个 Apache HTTP 服务器)。
POST 表单中键/值对中的单个值的技术和实际限制是什么?
asp.net-mvc ×2
http ×2
apache ×1
asp-classic ×1
c# ×1
conditional ×1
debugging ×1
dynamic ×1
grouping ×1
http-post ×1
httpresponse ×1
jetty ×1
jquery ×1
knockout.js ×1
methods ×1
mime-types ×1
option ×1
post ×1
properties ×1
rest ×1
select ×1
t-sql ×1
tablesorter ×1
url ×1
vbscript ×1
where-clause ×1
xslt ×1