Задать вопрос
  • Как обработать все ошибки (перехваченные и неперехваченные) в ASP.Net MVC?

    andrewpianykh
    @andrewpianykh
    Я предпочитаю следующий подход:

    1. Создаем контроллер ErrorController, например так:

    public class ErrorController
    {
    	public virtual ActionResult BadRequest()
    	{
    		return View();
    	}
    
    	public virtual ActionResult Forbidden()
    	{
    		return View();
    	}
    
    	public virtual ActionResult Index()
    	{
    		return View();
    	}
    
    	public virtual ActionResult NotFound()
    	{
    		return View();
    	}
    }


    2. Добавляем вьюхи

    3. Создаем свой расширенный HandleErrorAttribute, например так:

    public class ExtHandleErrorAttribute : HandleErrorAttribute
    {
    	//private readonly ILogger logger;
    
    	public ExtHandleErrorAttribute(/*ILogger logger*/)
    	{
    		//this.logger = logger;
    	}
    
    	public override void OnException(ExceptionContext filterContext)
    	{
    		if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
    		{
    			return;
    		}
    
    		if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500)
    		{
    			return;
    		}
    
    		if (!ExceptionType.IsInstanceOfType(filterContext.Exception))
    		{
    			return;
    		}
    
    		if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
    		{
    			filterContext.Result = new JsonResult
    			{
    				JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    				Data = new
    				{
    					error = true,
    					message = filterContext.Exception.Message
    				}
    			};
    		}
    		else
    		{
    			var controllerName = (string)filterContext.RouteData.Values["controller"];
    			var actionName = (string)filterContext.RouteData.Values["action"];
    			var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
    
    			filterContext.Result = new ViewResult
    			{
    				ViewName = View,
    				MasterName = Master,
    				ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
    				TempData = filterContext.Controller.TempData
    			};
    		}
    
    		//var e = filterContext.Exception;
    		//logger.Error(e, e.Message);
    
    		filterContext.ExceptionHandled = true;
    		filterContext.HttpContext.Response.Clear();
    		filterContext.HttpContext.Response.StatusCode = 500;
    		filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    	}
    }


    4. Регистрируем глобальный фильтр:
    public class FilterConfig
    {
    	public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    	{
    		var extHandleErrorAttribute = DependencyResolver.Current.GetService<ExtHandleErrorAttribute>();// new ExtHandleErrorAttribute();
    		filters.Add(extHandleErrorAttribute);
    	}
    }


    5. В Global.asax.cs добавляем метод Application_Error:

    protected void Application_Error(object sender, EventArgs e)
    {
    	var httpContext = ((MvcApplication)sender).Context;
    
    	var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
    	var currentController = " ";
    	var currentAction = " ";
    
    	if (currentRouteData != null)
    	{
    		if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString()))
    		{
    			currentController = currentRouteData.Values["controller"].ToString();
    		}
    
    		if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString()))
    		{
    			currentAction = currentRouteData.Values["action"].ToString();
    		}
    	}
    
    	var ex = Server.GetLastError();
    
    	var controller = new ErrorController();
    	var routeData = new RouteData();
    	var action = "Index";
    
    	if (ex is HttpException)
    	{
    		var httpEx = ex as HttpException;
    
    		switch (httpEx.GetHttpCode())
    		{
    			case 404:
    				action = "NotFound";
    				break;
    
    			case 403:
    				action = "Forbidden";
    				break;
    
    			case 400:
    				action = "BadRequest";
    				break;
    
    			default:
    				action = "Index";
    				//var logger = DependencyResolver.Current.GetService<ILogger>();
    				//logger.Error(ex, ex.Message);
    				break;
    		}
    	}
    
    	httpContext.ClearError();
    	httpContext.Response.Clear();
    	httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;
    	httpContext.Response.TrySkipIisCustomErrors = true;
    	routeData.Values["controller"] = "Error";
    	routeData.Values["action"] = action;
    
    	controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);
    	((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
    }


    6. В web.config добавляем в system.web
    <customErrors mode="On" />

    также в system.webServer можно добавить:

    <httpErrors>
      <remove statusCode="400" subStatusCode="-1" />
      <remove statusCode="403" subStatusCode="-1" />
      <remove statusCode="502" subStatusCode="-1" />
      <remove statusCode="501" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="400" prefixLanguageFilePath="" path="/Error/BadRequest" responseMode="ExecuteURL" />
      <error statusCode="404" prefixLanguageFilePath="" path="/Error/NotFound" responseMode="ExecuteURL" />
      <error statusCode="500" prefixLanguageFilePath="" path="/Error" responseMode="ExecuteURL" />
      <error statusCode="501" prefixLanguageFilePath="" path="/Error" responseMode="ExecuteURL" />
      <error statusCode="502" prefixLanguageFilePath="" path="/Error" responseMode="ExecuteURL" />
      <error statusCode="403" prefixLanguageFilePath="" path="/Error/Forbidden" responseMode="ExecuteURL" />
    </httpErrors>
    Ответ написан
    Комментировать
  • Как поставить mac OS хакинтош, если видеокарта AMD?

    0xcffaedfe
    @0xcffaedfe
    Developer & Reverser
    1. Сборок os x не существует. (есть патченные ядра для amd(процей))
    2. Видео может работать либо нет этот не как не связано с производителем лишь с поддержкой со стороны apple.
    3. https://applelife.ru есть профильные ресурсы, c них и следовало начать, они существуют найти их не сложно, не представляю что и как вы искали что ничего не нашли.
    4. Без чтения профильных ресурсов, нечего даже и пытаться.
    5. Ваши проблемы начались в тот момент когда вы решили что поставить os x на pc это тоже самое что поставить win или *nix. Почему вас не остановил тот факт что os x не предназначена для установки на pc не совсем понятно.
    -----В общем:
    Читайте профильные ресурсы:
    Там расскажут что такое: fakesmc и зачем оно надо, clover(как его ставить и настраивать), dsdt(как дампить, как править и как подменять оригинальный), так-же узнаете почему не работают usb 2\3 порты и как их заставить работать и массу другой полезной информации.
    Ответ написан
    Комментировать
  • Подключение ЯндексКассы на сайт. Тестовый режим будет работать на копии сайта?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Подрядная студия Вам не врёт.
    У меня есть личный опыт общения с ТП Яндекс.Кассы и лично я настраивал интеграцию.
    Ответ написан
    Комментировать
  • Как установить nginx с официального сайта?

    BuriK666
    @BuriK666 Куратор тега Nginx
    Компьютерный псих
    Ответ написан
    Комментировать
  • Как пропинговать хост с портом?

    Spetros
    @Spetros
    IT-шник
    как пропинговать сервер с портом в консоли

    RTFM пингутся адрес сервера, а не порт. У порта можно проверить открыт он или нет - это можно проделать например, при помощи утилиты telnet.

    с примерами реализации проги на C# для пинга серверов

    Примеры реализации программа на C# несложно найти на сайтах фрилансеров.

    PS Довольно странный вопрос от человека у которого в профиле указано "системный администратор".
    Ответ написан
    2 комментария
  • Joomla не отображаются списки в меню, в чем проблема?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    переставьте жумлу - будет проще.
    Ответ написан
    Комментировать
  • Как сделать скрытый редирект?

    @HAbRAhabp
    cname, anonymizer, iframe, ajax, выбирайте на свой вкус.
    Ответ написан
    Комментировать
  • Как правильно обращаться к элементам списка?

    AnnTHony
    @AnnTHony
    Интроверт
    Цикл for здесь лишний.

    while(testlist):
    	x = testlist.pop(0)
    	print('Беру элемент', x)
    	print('Удаляю', x)
    Ответ написан
    1 комментарий
  • Правильный запрос SQL?

    taliban
    @taliban
    php программист
    select * from users where firstname like '%3%'
    где подвох?
    Ответ написан
    2 комментария
  • Есть ли SQL база с mime-types и иконками к ним?

    27cm
    @27cm
    TODO: Написать статус
    1. Берём какой-нибудь наиболее полный список mime типов:
    svn.apache.org/repos/asf/httpd/httpd/trunk/docs/co...

    2. Любой большой набор иконок для mime типов:
    github.com/eagerterrier/MimeTypes-Link-Icons/tree/...

    3. Пишем небольшой скрипт на любом известном вам языке и база готова.

    ...Это на случай, если никто вам так и не скинет готовую базу.
    Ответ написан
    Комментировать
  • Какую систему выбрать для шлюза?

    @asperin2
    PHP разработчик
    Не проще mikrotik, а комп под другие нужды ?
    Ответ написан
    8 комментариев
  • Проверка наличия шрифта (c# wf)?

    1 вариант - получить список всех шрифтов в винде, в нем проверить наличие нужного (гуглим)
    2 вариант - попробовать один раз создать нужный и определить есть он или нет,это сработает,если вываливается исключение.

    Эти варианты рассматривали, если да,то в чем трудность?
    Ответ написан
    Комментировать
  • В каком формате windows хранит пароли учетных записей?

    oia
    @oia
    сохранятся в особом зашифрованном виде, это так называемые хэш-коды. И для того, чтобы "перевести" их на понятный и доступный простому человеку язык существуют специальные программы. Пароли учетных записей в Windows 7 и Windows XP можно найти на диске «С» в папке с названием Windows. Там нужно отыскать папочку System32, а в ней - Config. Там можно найти файл с именем SAM
    Ответ написан
    2 комментария
  • Как собрать статистику отключивших Javascript?

    @IceJOKER
    Web/Android developer
    ajax запрос может быть?

    $.post('/collect_statistic.php'); // одна строчка
    проверять ничего не нужно, ибо если JS не включен, то код не сработает )) все легко и просто
    Ответ написан
    6 комментариев
  • Как исключить robots.txt из редиректа с www на без www?

    ILoveYAnny
    @ILoveYAnny Автор вопроса
    Ответ, перед RewriteEngine On:
    <FilesMatch "robots.txt$"> 
    RewriteEngine off 
    </FilesMatch>
    Ответ написан
    Комментировать
  • Как можно восстановить структуру внешнего жесткого диска?

    @oni__ino
    1. Подключить диск напрямую к ПК
    2. Загрузиться с LiveCD Ubuntu, посмотреть SMART диска, расшифровать параметры и понять стоит ли с ним что-то делать дальше.
    3. Если стоит продолжать, открыть GParted, стереть таблицу разделов, перезаписать MBR, создать раздел, запустить полное форматирование.

    Если все это звучит сложно, ничего не делать и продать диск как не рабочий.
    Ответ написан
    Комментировать
  • Как убрать с localstorage дефолтные данные браузера?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Это не "Хром заносит там свои данные", а Я.Метрика. Следовательно, хотите убрать "мусор" - отключите Метрику.
    Ну а правильным решением будет, разумеется, нормальное хранение корзины одним объектом, тогда и героически преодолевать трудности, созданные своими руками, не придётся.
    Ответ написан
    Комментировать
  • Обработка большого объема данных при работе с API VK для десктопного приложения?

    ragimovich
    @ragimovich
    Какие 18кб на пользователя? У вас каждый пользователь состоит в 4600 группах? Информация об одной группе занимает 4 байта (в ВК нет пока групп с ID > 2 миллиардов). Т.е. пользователь со 100 группами будет занимать 400 байт в памяти. 143000 * 400 = 56 МБ. Без понятия, как там с использованием памяти в списках/массивах C#, но не думаю, что оверхед составит больше чем еще 1-2 объем данных. Т.е. в худшем варианте у вас вйдет 150 Мб оперативки на 150К человек.

    В бинарном формате база ID пользователей 90М групп ВК весит 35Гб, а вы про какие-то 2.5Гб на 140К пользователей.
    Ответ написан
    Комментировать
  • JSON.NET Как написать класс, где поле в json может иметь разный тип данных?

    ArXen42
    @ArXen42
    Можно попробовать сделать data типом Object, но не факт, что рантайм сериализация это дело подхватит. И потом работать с ним в стиле if (data.GetType.IsArray) ... (ужас какой).
    Но, как мне кажется, это плохой подход. Если приходят разные данные - нужно и сущности разные делать. Хотя, конечно, зависит от контекста задачи и т.д.
    Ответ написан
    Комментировать