• Что использовать для быстрой генерации Excel файла?

    Nipheris
    @Nipheris Куратор тега C#
    Если не считать вот этого требования:
    сразу отдавать его назад пользователю, без сохранений на хард

    то однозначно EPPlus (в нюгете: EPPlus ), врядли вы что-то лучше найдете, не требующее наличия установленного Офиса. Насчёт "сразу отдавать пользователю" - надо посмотреть, умеет ли писать воркбук в Стрим, а не в файл.

    UPD: судя по конструктору ExcelPackage(Stream newStream), умеет. Так что пишите в МемориСтрим, и отдавайте юзеру. Не забудьте Content-Type нужный проставить)
    Ответ написан
    3 комментария
  • Как обработать все ошибки (перехваченные и неперехваченные) в 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>
    Ответ написан
    Комментировать
  • Как писать тесты в asp.net mvc не затрагивая Entity Framework?

    @Sing303
    Вариант 1:
    Использовать неограниченные фреймворки, на подобии Typemock, он позволит подделывать что угодно, приватные и статические методы

    Вариант 2:
    Использовать репозиторий. Необходимость использовать Typemock говорит о том, что код "плохо пахнет" и в нём явно что-то не так.
    Ответ написан
    Комментировать
  • Как писать тесты в asp.net mvc не затрагивая Entity Framework?

    Nipheris
    @Nipheris Куратор тега C#
    Как мокать EF не используя не нужный слой абстракции с репозиторями таким образом чтобы весь функционал EF оставался рабочим?

    Может, не такой он уж он не нужный? Репозиторий нужен в том числе для того, чтобы иметь четкий список методов для тестирования. Я сейчас вообще не могу толком понять, что вы тестируете.
    Ответ написан
    Комментировать
  • Проверка условий на буквы?

    amf1k
    @amf1k
    Читайте про регулярные выражения
    Ответ написан
    Комментировать
  • Как перевести число в строку без потери формы?

    Если задача именно избавиться от экспоненциальной формы, то подойдет такое решение
    string formatted = String.Format("{0:F20}", value);
    Ответ написан
    Комментировать
  • Чем отличается onion-architecture от n-layer-architecture?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    n-layered архитектура - это просто архитектура построенное на рандомном количестве слоев. оно определяет базовые принципы разделения ответственности и все такое, но на этом все.

    onion - тут уже идет уточнение, что мол в самом сердце у нас core-domain, сущности, базовые бизнес правила. От него уже идет дальше domain layer, application layer и т.д. То есть сначала мы проектируем core-domain а потом уже все остальное.

    Есть еще гексагональная - это опять же уточнения для n-layered архитектур, что мол каждый слой отделен друг от друга за счет dependency inversion. На границах слоев всегда есть интерфейсы, а у внешнего слоя - реализация. Потому ее называют "архитектура портов и адаптеров".
    Ответ написан
    2 комментария
  • Каким образом с технологией ASP.NET MVC соотносятся языки программирования С# и VB.NET?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    У веб приложения есть две части - клиентская и серверная. Клиентская - это веб страничка, которую пользователь видит в браузере. Серверная - это то, что генерирует на сервере эти странички, которые загружаются у пользователя на клиенте (в браузере).

    Клиентская часть - это HTML, CSS и JavaScript - то бишь те технологии, которые используются для создания обычных веб страниц. При этом на сервере могут быть использованы очень разные стеки технологий. В частности для стэка .NET - есть IIS (веб-сервер для хостинг-серверов на базе Windows), на котором работает ASP.NET (это веб фреймворк для генерации веб страниц) с использованием языка программирования С# или VB.NET.

    Пример другого стека на сервере: веб-сервер Apache (обычно на хостинг сервере на базе Linux), на котором работает скажем веб-фреймфорк CakePHP с использованием языка программирования PHP.

    Еще один пример: веб-сервер Passenger (на хостинг сервере под управлением операционок семейства Unix), на котором работает веб-фремворк Ruby on Rails, где разработку вы ведете на языке программирования Ruby.

    Есть подобные серверные комбинации для других языков программирования - Python, Java и тп.

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

    Например, для языка программирования PHP есть много разных веб фреймворков. Для других языков - тоже. Даже для языков С# и VB.NET есть ASP.NET WebForms (раньше его наывали просто ASP.NET) и ASP.NET MVC (сюда же я бы отнес вариацию фреймворка для создания API - Web API). Для многиэ стэков есть много разных веб-серверов, веб-времворков и соответственно можно использовать много вариантов связок ОС - ВС - ВФ - ЯП

    На счет "Пишем сайт на VB.NET" это скорей всего значит - пишем на VB.NET веб приложение, которое будет использовать один из веб фремворков (либо ASP.NET WebForms либо ASP.NET MVC).

    Надеюсь, мне удалось внести ясность в терминологическую кашу, окружающую нас. К сожалению, даже в википедии я часто вижу эту кашу и кто-то начинает называть ASP.NET языком программирования. Это не так.
    Ответ написан
    7 комментариев
  • Как правильно выбрать архитектуру приложения?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Архитектор, это обычно выше уровня senior, поэтому в книгах не будет указано на сколько слоев нужно делить и какой паттерн выбрать для вашего приложения.

    Будут другие примеры, а с опытом вы научитесь подбирать наиболее подходящие, чаще всего набив шишки.
    Ответ написан
    Комментировать
  • Какова роль Autofac в WPF приложениях?

    @SZolotov
    Asp.net core, MAUI,WPF,Qt, Avalonia
    IoC, DI гуглите.
    Ответ написан
    Комментировать
  • Android клиент и C# сервер. Правильно организовать?

    @dmitryKovalskiy
    программист средней руки
    На C# есть веб-фреймворк ASP.NET и его компонент WEB API. Пара несложных телодвижений и он вернет то что у него попросят ( спросят xml - вернет xml, аналогично json).
    Ответ написан
    Комментировать
  • Как с помощью Webpack с CommonsChunkPlugin разделить код по страничным бандлам?

    @Roman_Kh
    Потому что vendor не должен быть в entry, если вы хотите, чтобы он стал единой сборкой общего кода.

    А вообще, лучший туториал по Webpack - https://www.youtube.com/playlist?list=PLDyvV36pndZ... - с разнообразными примерами и подробными пояснениями.
    Смотрите видео с 3.1 по 3.6 - это займет 20 минут, зато все станет понятно.
    Ответ написан
    7 комментариев
  • Что даёт владение компьютером (планшетом, смартфоном) в плане развития ребёнку?

    @moozooh
    Chief Technical Grammar Nazi
    У меня свой компьютер появился в 15 лет, и сейчас обе моих профессии неразрывно связаны со знаниями, которые я приобрёл в ходе своей работы с компьютером. Но ещё задолго до того, как он появился, я игрался с конструкторами, учил английский в школе и дома, много читал, и среди моих любимых книг детства были «Почемучка», «Твоё свободное время», БСЭ, мифы и сказки разных народов, жюльверны-даррелы-азимовы, географические атласы и всякий научпоп. Прошло много лет, и я использую компьютер и планшет для самообразования, смотрю на них кино и читаю книги, ежедневно узнаю что-то новое из мира науки и техники, толерантно и с интересом отношусь к другим культурам, продолжаю расширять кругозор, говорю по-английски и регулярно езжу бродить по горам.

    Понимаете, к чему я клоню, да? Это такой тонкий намёк™ на то, что в плане развития компьютер/планшет/смартфон даёт человеку ровно то же самое, что человек делал до него или без него — просто более эффективно и в большем количестве. А если ребёнок на этих устройствах занимается только фигнёй, то это проблема не компьютера, и даже не ребёнка, а родителей, которые в первые несколько лет жизни не смогли должным образом удовлетворить его любознательность и заставить мозг работать.
    Ответ написан
    Комментировать
  • Что даёт владение компьютером (планшетом, смартфоном) в плане развития ребёнку?

    @Alcospb
    Кругозор и объем знаний развивается не за счет времени проведенного перед монитором, а за счет действий, которые предпринимает индивидуум.
    Аналогично, ваши мышцы не станут сильнее от сидения в качалке, как и мозги эффективнее от чтения анекдотов.
    Ответ написан
    Комментировать
  • Что даёт владение компьютером (планшетом, смартфоном) в плане развития ребёнку?

    @jackroll
    Сверхразум
    Спросите у себя, почему имея доступ к интернету ваши знания не растут в геометрической прогрессии.

    p.s вы требуете от ребенка слишком многого. Природа создавала человека не для того, чтобы он складывал числа или программировал на java.
    Ответ написан
    3 комментария
  • Что даёт владение компьютером (планшетом, смартфоном) в плане развития ребёнку?

    vawsan
    @vawsan
    Frontend Developer
    Если он там кидает птичек в хрюшек, то ничего не дает.
    Если читает, иногда смотрит кино, какие-то обучающие программы использует - то аналогично работе за компом.
    Ответ написан
    Комментировать
  • Как пощупать рынок, и спрос к стартапу?

    nki
    @nki
    bezkart.ru готовая система лояльности
    >>>советует что надо для предварительного анализ создать сайт и заказать рекламу
    Для начала создайте портрет/профиль вашего потенциального пользователя. Поймите, что реклама в интернете - это один из каналов привлечения и не факт, что ваша целевая аудитория активно пользуется этим каналом.
    Я бы на вашем месте лично бы пообщался с возможными пользователями. Узнал бы актуальна ли для них проблема, которую решает ваше приложение, готовы ли они платить за него и т.д.
    Не зацикливайтесь на интернете - побольше живого общения. Посетитель вашего сайта просто закроет его, а собеседник может рассказать, что ему не хватает и что он ожидает от подобного продукта.

    Успехов в ваших начинаниях.
    Ответ написан
    6 комментариев
  • Какие действия необходимы в направлении продвижения сайта?

    Я бы попробовал пойти по следующей схеме:
    1) У меня есть сайт
    2) Для чего мне сайт? (люблю делиться мыслями, хочу что-то продавать, выставлять котиков)
    3) Для кого мой сайт (кто мой посетитель, покупатель), какую ценность мой сайт предоставит или какую проблему решит.
    4) Кто мои конкуренты и почему они хороши (их сильные и слабые стороны)
    5) Что для меня является мерилом успеха сайта (для новостного сайта это посещаемость, для магазина посещаемость не так важна как конверсия)
    6) Хорошо разбираться в том, чем планируете заняться
    7) Подсматривайте первое время за конкурентами.
    8)В интернете полно полезных материалов по этой теме. Сергей Кокшаров дал вам ссылку на материалы. Просто лучше начать малыми порциями и систематически.
    9) Верить в свои силы и свой успех)
    Ответ написан
    Комментировать
  • Чем отличается разработка ASP.NET MVC от ASP.NET API?

    saDam
    @saDam
    Microservices, .NET Core, EF Core, SQL, RabbitMQ,
    В первую очередь нужно посмотреть наследование, как они работают:
    Если вы обратите внимание то webapi и asp.mvc(далее просто mvc) контроллеры наследуются от разных классов Http.ApiController и Mvc.Controller.
    Нужно понимать что webapi предназначен для реализации REST сервисов с охватом всех видов http запросов(GET, PUT, POST, DELETE итп) и ответом на запросы к webapi вы получаете json с явным указанием статуса ответа.

    В MVC можно реализовать то же самое что и в webapi, НО! лично я считаю, что эти вещи нужно четко различать, так как в случаи с MVC, вы должны понимать, что результатом запроса в большинстве случаев является сгенерированная вьюшка, то есть результат http запроса в большенстве случаев это html или что-то похожее. Да в mvc тоже может возвращаться структурированный json(например если вы делаете таблицу с пагинацией или с динамической подгрузкой данных, в таком случаи у вас метод Index возвращает вью на которой вы пишете ajax запросы к методу GetPageForTable этого же контроллера, но тут тоже есть вариация, вы в методе GetPageForTable вольны решать, отдавать только данные или уже сгенерированную вьюшку).

    Как итог: webapi - рест сервис со всеми типами http запросов, в котором ответ(по умолчанию) приходит в структурированном json и с явным статусом состояния(200, 404 итп...) . Хорошо подходит для проектов где клиентом может быть не только веб, но и допустим мобильное приложение или еще что-то.
    MVC - работает примерно как webapi но результатом может являться сгеренированная html разметка. В таком случаи уже поддержка многих платформ с клиентской части невозможно, представьте, что делать мобильному приложению с html разметкой...
    Ответ написан
    Комментировать
  • Можно ли использовать скрипты в проекте C#?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Неудачно ник себе выбрали. Даже как-то объяснять не хочется.
    Ответ написан
    1 комментарий