小编Val*_*Val的帖子

Asp.net MVC页面为图像文件提供Mime类型警告

虽然我没有看到任何受此影响的功能或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

55
推荐指数
1
解决办法
1万
查看次数

如何在.NET MVC 2中实现正确的HTTP错误处理?

我一整天都在努力在我的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:

  1. 找不到静态文件: /Content/non-existent-dir/non-existent-file.txt
  2. 未找到控制器: /non-existent-controller/Foo/666
  3. 找到控制器,但未找到操作: /Home/non-existent-action/666
  4. 找到控制器和操作,但操作找不到请求的对象: /Home/Login/non-existent-id

这是我认为的500:

  1. 发布一个不好的价值: POST /User/New/new-user-name-too-long-for-db-column-constraint
  2. 非数据相关问题,如Web服务端点无响应

其中一些问题需要由特定的控制器或模型识别,然后控制器应抛出适当的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响应的全面详细信息吗?

error-handling asp.net-mvc http httpresponse asp.net-mvc-2

39
推荐指数
1
解决办法
2万
查看次数

如何有条件地过滤WHERE子句中的列?

没错,第十个条件列问题:

我正在编写一个存储过程,它接受一个映射到几个标志列之一的输入参数.筛选请求列的最佳方法是什么?我目前正在使用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?

t-sql conditional dynamic where-clause

13
推荐指数
1
解决办法
2万
查看次数

如何从tablesorter插件获取当前排序顺序?

我刚开始使用Christian Bach优秀的TableSorter插件,我需要获得列的当前排序方向.我有几个专栏:

  • ID
  • 名称
  • 类别

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)

谢谢!

jquery tablesorter jquery-plugins

10
推荐指数
3
解决办法
1万
查看次数

使用属性或方法在C#中公开业务规则?

我正在编写一个类来封装一些业务规则,每个规则都由一个布尔值表示.该类将用于处理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)

c# methods properties

10
推荐指数
1
解决办法
1289
查看次数

调试Classic Asp时调试器在错误的行上

我在使用我可用的任何MS调试环境调试工作站上的任何ASP Classic网站时遇到问题.我在Win XP SP3上,使用内置的IIS 5.1.

它开始于几个星期前,发生在多个项目中.在我的环境中有一些明显的变化,因为它在过去工作正常,即使在最近的IDE中,只要我附加到进程.然后它打破了如下所述.我已经放弃了,但我最近开始研究一个新项目,尝试调试并且有效!但是今天,它又回到了同样破碎的行为:

当我尝试设置断点时,IDE实际上将点设置在我单击的行的上方或下方几行.我试图在完全是服务器端代码的行上设置断点,所以这不是因为它在嵌入代码块的HTML之前或之后跳过.偶尔它不会设置断点,给我一个空心的断点图标并显示一条错误,表示该行没有可执行代码.

当我附加到IIS进程(inetinfo.dll,因为我在低隔离模式下运行)时,断点可能不会被命中.如果是,并且我开始单步执行,则选定的线会跳转,并且不会落在源中的每个连续线上,也不会按预期方式跟随控制结构.监视的变量未按预期更新.它显然看到的代码与我对相同行号不同.

无论我是否在浏览器中加载页面,都会发生相同的行为

  • 从VS2010附加到进程,设置断点并刷新页面,或
  • 设置断点,附加到进程,然后刷新,或
  • 在我的源中添加一个'stop'语句,然后刷新页面.在这种情况下,我提供了一个可用调试器列表,并且每个调试器都执行完全相同的操作 - 它们跳过SAME代码行并遵循相同的'错误'路径.我已经尝试过VS2010,2008,2005,2003和Microsoft Script Debugger.

似乎源代码与调试器逐步完成的内容不同步.我已确定在VS>工具>选项>调试>常规中设置了"要求源文件与原始版本完全匹配"

当然,这些是ASP Classic站点 - 没有编译代码,因此我在IDE中看到的源应该与调试器执行的源相同.它不是特定于一个项目 - 它至少发生在至少两个完全独立的项目上.并且,它发生在多台机器上 - 我将我的项目部署到测试服务器并尝试在那里进行调试,并获得相同的行为.

我发现了一些有关UTF编码文件的相似声音问题的信息,这些文件包含非ANSI字符(你知道,你使用Unicode支持的那些!),这里,这里这里,但是我通过我的源代码找不到这样的任何文件.

有任何想法吗?谢谢!

debugging vbscript asp-classic visual-studio

9
推荐指数
1
解决办法
8516
查看次数

如何从knockout.js observableArray中获取所选菜单选项?

我觉得我错过了一些非常基本的东西,但我无法使用下拉菜单来工作,因为我期望使用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)

select option knockout.js drop-down-menu

7
推荐指数
1
解决办法
2万
查看次数

XSLT属性的3级分组

好的,我知道已经提出并回答了对此的各种变化; 我整天都在读它们,但我仍然被卡住了.所以,这里是:

我需要从一些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)

xslt grouping

4
推荐指数
1
解决办法
2998
查看次数

如何以REST样式获取只读vs可编辑资源?

我对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>...但是这看起来很丑陋给我.

思考?

rest url

4
推荐指数
1
解决办法
2797
查看次数

HTTP POST 中的各个字段是否有大小限制?

我有一个用于文件上传的 API,需要提交多部分表单。但我有一个客户正在编写一个客户端,他的系统无法正确生成请求multipart/form-data。他要求我修改 API 以接受请求中的文件application/x-www-form-urlencoded,文件名位于一个键/值对中,文件内容(base64 编码)位于另一个键/值对中。

原则上我可以轻松做到这一点(尽管之后我需要淋浴),但我担心尺寸限制。我们预计生产中的文件将相当大:5-10MB,有时高达 20MB。我找不到任何关于表单 POST 内单个键/值对数据的长度限制的信息,无论是在规范中(我已经查看了 HTTP规范Forms 规范等)还是在特定的实现中(我的 API 运行在 Java 应用程序服务器 Jetty 上,前面有一个 Apache HTTP 服务器)。

POST 表单中键/值对中的单个值的技术和实际限制是什么?

apache post http jetty http-post

4
推荐指数
1
解决办法
8634
查看次数