Como sobrescrever todas as páginas de erro padrão no WebAPI
Meu lindo webservice REST funciona muito bem. Exceto se eu visitar páginas como~/
, que retorna a página Proibida do IIS 403 padrão (mesmo usando o Fiddler e especificando apenasAccept: application/json
). Eu não quero nada além de erros JSON ou XML. Existe uma maneira de substituir todas as exceções com um manipulador de exceção personalizado? ou um controlador padrão para lidar com todas as solicitações desconhecidas? Qual é a maneira mais simples e mais correta (se diferente) de lidar com isso para que os clientes precisem apenas analisar datagramas XML compatíveis com API REST ou blobs JSON?
Exemplo de solicitação:
GET http://localhost:7414/ HTTP/1.1
User-Agent: Fiddler
Host: localhost:7414
Accept: application/json, text/json, text/xml
Resposta: (que eu não gosto, note quetext/html
não foi um dos tipos de resposta aceitos)
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcaWNhcm9sXENoYXJpdHlMb2dpYy5pQ2Fyb2wuQXBp?=
X-Powered-By: ASP.NET
Date: Fri, 25 Jan 2013 21:06:21 GMT
Content-Length: 5396
<!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>
<title>IIS 8.0 Detailed Error - 403.14 - Forbidden</title>
<style type="text/css">
<!--
...
Resposta (que eu preferiria):
HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Type: application/json; charset=utf-8
Date: ...
Content-Length: ....
{
"error":"forbidden",
"status":403,
"error_description":"Directory listing not allowed."
}