Ошибка HTML возвращается на рабочий сайт ASP.NET MVC 2, но не на локальный - PullRequest
1 голос
/ 02 октября 2011

У меня есть RESTful API, созданный с ASP.NET MVC2, который возвращает все данные в формате XML:

string xml = Serialize(Data, context, AcceptCharsetList, encoding);
context.HttpContext.Response.ContentEncoding = encoding;
context.HttpContext.Response.Charset = encoding.WebName;
context.HttpContext.Response.ContentType = "application/xml";
context.HttpContext.Response.Write(xml);

На моем локальном хосте, который отлично работает как для обычных ответов (модель + представление), так и для ошибок (ошибкамодель + ошибка + код состояния http).

Но на реальном веб-сервере только обычные запросы возвращают xml.Для ошибок это не работает, и ошибка подается как HTML с типом содержимого = text / html.

Мой локальный хост - это 64-битная Windows 7 с IIS 7.5, а мой веб-сервер - 64-битная Windows 2008 с IIS 7.5

Что может быть не так?

Ожидаемый XML такой:

<?xml version="1.0"?>
<Error xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns="http://api.example.com/">
  <Description>(403) Forbidden.</Description>
</Error>

Но он возвращает этот HTML вместо этого на веб-сервере:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>403 - Forbidden: Access is denied.</title>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>403 - Forbidden: Access is denied.</h2>
  <h3>You do not have permission to view this directory or page using the 
  credentials that you supplied.</h3>
 </fieldset></div>
</div>
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

Похоже, IIS возвращает свои собственные страницы ошибок.В диспетчере IIS перейдите к своему приложению и в представлении «Функции» найдите страницы ошибок в разделе IIS (не в разделе ASP.NET).

Этот пост в блоге выглядит следующим образомон обсуждает ту же проблему, и автор использует свойство HttpResponse.TrySkipIisCustomErrors для ее решения.Я не уверен, применимо ли это в вашей ситуации - надеюсь, это так.

0 голосов
/ 02 октября 2011

Возможно, вы настроили страницы пользовательских ошибок на рабочем сервере, которые возвращаются при возникновении ошибок. Попробуйте отключить его в Web.config :

<customErrors mode="Off" />
...