Jak zastąpić wszystkie standardowe strony błędów w WebAPI
Moja piękna usługa REST działa świetnie. Z wyjątkiem, gdy odwiedzam strony takie jak~/
, która zwraca domyślną stronę IIS 403 Forbidden (nawet używając Skrzypek i określając tylkoAccept: application/json
). Chcę tylko błędów JSON lub XML. Czy istnieje sposób na zastąpienie WSZYSTKICH wyjątków za pomocą niestandardowej procedury obsługi wyjątków? lub domyślny kontroler do obsługi wszystkich nieznanych żądań? Jaki jest najprostszy i najbardziej poprawny (jeśli jest inny) sposób radzenia sobie z tym, aby klienci potrzebowali tylko analizować przyjazne API REST datagramy XML lub bloby JSON?
Przykładowa prośba:
GET http://localhost:7414/ HTTP/1.1
User-Agent: Fiddler
Host: localhost:7414
Accept: application/json, text/json, text/xml
Odpowiedź: (czego nie lubię, zauważ totext/html
nie był jednym z akceptowanych typów odpowiedzi)
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">
<!--
...
Odpowiedź (wolałbym):
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."
}