Страницы пользовательских ошибок приложения ASP.NET MVC не отображаются в среде общего хостинга

  1. Когда вы используете AFXMLResponseSerializer как AFHTTPRequestOperationManager's responseSerializer, блок successObject в успешности является объектом NSXMLParser, вы должны реализовать NSXMLParser's делегат и разбор xml
  2. Если вы хотите получить xml как строковый объект. Используйте следующий код:

Используя AFHTTPResponseSerializer, затем закодируйте данные ответа на строку

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer new];
    NSDictionary *parameters = @{@"foo": @"bar"};
    [manager POST:@"http://www.raywenderlich.com/downloads/weather_sample/weather.php?format=xml" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSData * data = (NSData *)responseObject;
        NSLog(@"Response string: %@", [NSString stringWithUTF8String:[data bytes]]);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

UPDATE

set User-Agent:

    AFHTTPRequestSerializer * requestSerializer = [AFHTTPRequestSerializer serializer];
    [requestSerializer setValue:@"your user agent" forHTTPHeaderField:@"User-Agent"];
    manager.requestSerializer = requestSerializer;
14
задан gevorg 9 June 2016 в 14:51
поделиться

2 ответа

Я нашел решение, и оно невероятно простое. Оказывается, проблема на самом деле была в IIS7. При отладке этой проблемы в Visual Studio я увидел свойство объекта HttpResponse, которое раньше не замечал:

public bool TrySkipIisCustomErrors { get; set; }

Это привело меня к ближайшей поисковой системе, которая нашла отличное сообщение в блоге Рика Стрэла и еще один на angrypets.com , а также этот вопрос здесь, на SO . Эти ссылки объясняют кровавые подробности намного лучше, чем я могу, но эта цитата из сообщения Рика хорошо отражает это:

Настоящая путаница здесь возникает из-за того, что ошибка улавливается ASP.NET, но в конечном итоге все еще обрабатывается IIS, который смотрит на 500 и возвращает стандартную страницу ошибки IIS.

Также кажется, что такое поведение характерно для IIS7 в интегрированном режиме. Из msdn :

При работе в классическом режиме в IIS 7.0 TrySkipIisCustomErrors значение свойства по умолчанию - истина. При работе в интегрированном режиме Значение по умолчанию для свойства TrySkipIisCustomErrors - false.

Таким образом, практически все, что мне пришлось сделать, это добавить Response.TrySkipIisCustomErrors = true; сразу после любого кода, который устанавливает Response.StatusCode в 500 или 503, и теперь все работает, как задумано.

29
ответ дан 1 December 2019 в 09:13
поделиться

I host an ASP.NET MVC site on GoDaddy and also faced issues dealing with custom error pages. What I found, through trial and error, was that GoDaddy intercepts errors at the HTTP level.

For example, any page which returned an HTTP status code of 404 caused GoDaddy's custom error page to take over. Eventually I changed my custom error pages to return 200 status and the 404-related problem went away. My HTML was the same, just the HTTP status needed to change.

I admittedly never tried doing the same with 503 status responses, but it's possible that the same mitigation may work. If you change from returning a 503 status to returning 200 status, does the problem go away?

Note that, if you do this workaround, you'll want to prevent search engines from indexing your error pages, which once then return a 200 status will be indistinguishable (from the search engine's perspective) from a regular page. So make sure to add a META ROBOTS tag to prevent indexing of your error pages, e.g.

<META NAME="ROBOTS" CONTENT="NOINDEX">

The downside of this approach may be that your page might be removed from Google, which is definitely not a good thing!

UPDATE: So, in addition, you can also detect whether the user agent is a crawler or not, and if it's a crawler return a 503 while if it's not a crawler, return a 200. See this blog post for info about how to detect crawlers. Yes, I know that returning different content to crawlers vs. users is an SEO no-no, but I've done this on several sites with no ill effect so far, so I'm not sure how much of a problem that is.

Doing both approaches (META ROBOTS and bot detection) may be your best bet, in case any oddball crawlers slip through the bot detector.

0
ответ дан 1 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: