小编Ben*_*men的帖子

是否可以使用自定义错误页面与MVC站点而不是Web API?

我有一个带有/ api文件夹的MVC项目,其中包含我的Web API控制器.我想要以下事项:

  • 我的MVC站点在发生错误时提供自定义错误页面
  • 我的Web API提供默认错误响应(包含异常和堆栈跟踪的json/xml)

在我的MVC站点的web.config中,我有一个httpErrors节点,并将errorMode设置为"Custom",以便在404s/500s/etc时我可以拥有漂亮的错误页面.在浏览MVC站点期间发生:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" subStatusCode="-1" />
  <remove statusCode="500" subStatusCode="-1" />
  <remove statusCode="403" subStatusCode="-1" />
  <error prefixLanguageFilePath="" statusCode="404" path="Content\notfound.htm" responseMode="File" />
  <error statusCode="500" path="/Errors" responseMode="ExecuteURL" />
  <error statusCode="403" path="/Errors/Http403" responseMode="ExecuteURL" /></httpErrors>
Run Code Online (Sandbox Code Playgroud)

但是,使用该配置,API将在发生错误时提供自定义错误页面,而不是具有异常/堆栈跟踪的json/xml(这是所需的行为).

有没有办法将自定义错误配置为仅应用于我的MVC站点而不是Web API?这篇博客说没有(http://blog.kristandyson.com/2012/11/iis-httperrors-aspnet-web-api-fully.html),但我想知道是否有其他人找到了工作自该博客发布以来.

我想如果没有,我可以为我的Web API项目创建一个单独的项目/程序集.这将允许我分别为MVC和Web API配置httpErrors,但我不想创建另一个项目,所以我还有另一个web.config来配置.

iis error-handling asp.net-mvc web-config asp.net-web-api

30
推荐指数
1
解决办法
6633
查看次数

当$ .ajax的响应为301时,我可以通过编程方式获取新的URL吗?

当对xhr请求的响应是301时,有没有办法获取最终重定向到的URL?

我的网站包含来自旧版本的大量遗留网址,这些网址会返回301对正确新网址的回复.

出于实用目的,我希望能够向旧URL发出请求,并能够检索新的URL,即发送请求到"/oldpage.aspx?foo=someParam",获取新的URL"/ arbitaryNewPageName/someParam".

我在firebug控制台中一直在玩这个:

    $.ajax({
            url: "/oldpage.aspx?foo=someParam", 
            success: function(response, status, jqxhr){
            //poking around, trying to get the new URL, "/arbitraryNewPage/someParam"
                console.log(jqxhr.getAllResponseHeaders());
                console.log(jqxhr);
            },
            beforeSend: function(jqxhr, settings){
                console.log(jqxhr);
                console.log(settings);
            }
        });
Run Code Online (Sandbox Code Playgroud)

我可以在firebug中看到,当这段代码运行时,它会对"/oldpage.aspx?foo=someParam"执行一次GET,并获得301响应,然后获得另一个GET到"/ arbitaryNewPageName/someParam".

对于第一个请求,我在响应标头的Location值中看到重定向的URL.不幸的是,第二个请求是传递给$ .ajax.success函数的内容,它只在请求头的Referrer值中有重定向的URL.

是否有可能拦截对第一个响应的响应,或者可能会看到第二个请求的请求标头?

编辑:感谢大家的回复.我想我需要提供一些背景来澄清我到底在寻找什么.

业务用户要求我创建一个将旧URL与新URL相关联的列表.由于我已经实现了将旧URL重定向到服务器上的新URL的方法,因此我希望能够减少这项工作,并创建一个脚本,将请求放置到旧URL并获取请求被重定向到的URL.像这样的东西:

for (var i = 0; i < arrayOfLegacyUrls.length; i++)
{
    $.ajax({
            url: arrayOfLegacyUrls[i], 
            success: function(response, status, jqxhr){
                var newUrl = "???"; //do magic to get URL that request was redirected to

                writeToFileForBusinessUser(arrayOfLegacyUrls[i], newUrl);
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

我的问题的关键在于:我可以从XHR获取我的请求被重定向到的URL吗?到目前为止,答案似乎是"不".

javascript jquery xmlhttprequest jqxhr

14
推荐指数
1
解决办法
7039
查看次数

ELMAH applicationName:显示其他站点记录的异常

我使用Elmah.SqlErrorLog有一个站点记录错误.我的目标是让另一个站点包含服务于localhost/elmah.axd通常会看到的页面的处理程序.原因是记录错误的站点使用表单身份验证,而我想限制谁可以通过Windows身份验证查看日志.

执行日志记录的站点在端口80上运行,显示日志的站点在端口8008上.首先,我无法看到日志记录站点的异常.然后我找到了这个答案,解释了你可以为你的errorLog设置applicationName:ELMAH日志的独立查看器应用程序

我查看了ELMAH登录的表格,发现在我尝试将日志/查看分成两个不同的站点之前,它已经在Application列中记录了"/ LM/W3SVC/3/ROOT".

指定applicationName ="/ LM/W3SVC/3/ROOT"后,它工作了!不幸的是,这个值因机器而异,当下一个人的开发盒碰巧有一个applicationName为"/ LM/W3SVC/10/ROOT"时,这个值不会很好.根据这个,该字符串与本地机器名称空间有关:http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/44a57859-8fbb-4238-a7b5-f10c34cf8fe8.mspx? mfr= true

如何在端口8008上获取用于查看日志的站点以显示从端口80上的站点记录的异常?

iis-7 elmah asp.net-mvc-3

6
推荐指数
1
解决办法
3419
查看次数