Вопросы с тегами [asp.net-web-api2]

0

голосов
0

ответ
25

Просмотры

How would one successfully return a BadRequest with an MVC Model?

My aim is to create a bad request response that passes an object with it. The reason for this is to create consistency with my return types. I have tried serializing as a JSON serialize but the response was not the same as sending the object. So if there is any way at all that this can be sent, it would be great to know. Also, I know there is a method of doing this in .NET core but I would rather use just .Net as I have more options and I am working with other projects that rely on this. // POST: api/postLogin [AllowAnonymous] [System.Web.Http.HttpPost, System.Web.Http.Route("postlogin")] public async Task PostLogin(LoginDTO login) { OutputDTO output = new OutputDTO(); LoginDTO loginDTO = null; try { if (!ModelState.IsValid) { output.Success = false; output.SetValidations(ModelState); output.ErrorMessage = "Invalid Model"; return BadRequest(output); } login newLogin = new login(); string encryptedPassword = Crypto.ApplyPasswordObfuscation(login.Password, true); login loginUser = await _context.login.SingleOrDefaultAsync(m => m.name == login.Username && m.password == encryptedPassword); if (loginUser == null) { output.Success = false; output.ErrorMessage = "Invalid login credentials"; var json = new JavaScriptSerializer().Serialize(output); return BadRequest(json); // Not 401, since you don't want to return to the login page. Client will be already on login page } else { loginDTO = new LoginDTO(loginUser); output.Success = true; output.Results = new List { loginDTO }; return Ok(output); } } catch (Exception e) { output.Success = false; output.ErrorMessage = "Login " + e; return BadRequest(output); } }
Paradigm
1

голосов
2

ответ
110

Просмотры

Общий код для инъекции зависимостей для веб-апи, панели администратора и MVC контроллер

В настоящее время, у меня ниже 4-х проектов в моем файле решения: API (Web API) Web (MVC) Администратор (MVC) Service Layer (C # библиотека) Уровень сервиса используются всеми 3 веб-проектов. Службы вводится с помощью Autofac контейнера. Услуги регистрируются в каждом из веб-проектов во время запуска, которая вызывает дублирование кода. Есть более простой способ, где я могу зарегистрировать все зависимости в одном месте, так что он может быть повторно использован всеми проектами? Любая помощь высоко ценится.
user3151766
1

голосов
0

ответ
39

Просмотры

Войти Исключения с EntityFramework в WebAPI Exception Filter или IExceptionLogger

Я имею в виду использовать ExceptionLogger или ExceptionFilterAttribute в моем Web API приложения 2.x. Мой OR / M является Entity Framework 6 и AutoFac как мой IoC. Рассмотрим атрибут исключения ниже: ApiExceptionFilterAttribute общественного класса: ExceptionFilterAttribute {общественного IDbContext MyContext {получить; задавать; } Общественного переопределения недействительный OnException (HttpActionExecutedContext actionExecutedContext) {base.OnException (actionExecutedContext); // некоторый код MyContext.SaveChanges (); }} Я думаю, если мое приложение выбрасывает любое исключение OnException метод будет вызывать и мне нужен новый экземпляр DbContext, чтобы сохранить журнал ошибок, но моя конфигурация AutoFac для DbContext является InstancePerRequest, так что я думаю, что AutoFac разрешит MyContext как совместно DbContext. Вот моя конфигурация AutoFac для DbContext: builder.RegisterType (). Как () .InstancePerRequest (); Как я мог бы сделать AutoFac к reslove DbContext как новый экземпляр для ApiExceptionFilterAttribute?
Ali Bahraminezhad
1

голосов
1

ответ
50

Просмотры

Как разместить данные в Web API от хранимых процедур и EF Db первого подхода

У меня есть проблема в отправке данных в моем проекте веба-API, у меня есть метод действия и хранимая процедура и таблица, с помощью которого хотят выполнить операцию после, но я получаю внутреннее сообщение об ошибке сервера, когда я отправляю данные из стельки моего стола структура приведено ниже общественного класс tblImage частичного {общественной строка ImageID {получить; задавать; } Публичная строка ImagePath {получить; задавать; } Публичная строка ImageCategory {получить; задавать; }} Моя хранимая процедура кода производится в Visual Studio приводятся ниже общественные виртуальный ИНТ InsertDynamicImage (строки ImageID, струнный ImagePath, строка imageCategory) {вара imageIdParameter = ImageID! = NULL? новый ObjectParameter ( "ImageID", ImageID): новый ObjectParameter ( "ImageID", TypeOf (строка)); вар imagePathParameter = ImagePath! = NULL? новый ObjectParameter ( "ImagePath", ImagePath): новый ObjectParameter ( "ImagePath", TypeOf (строка)); вар imageCategoryParameter = imageCategory! = NULL? новый ObjectParameter ( "ImageCategory", imageCategory): новый ObjectParameter ( "ImageCategory", TypeOf (строка)); Возвращение ((IObjectContextAdapter) это) .ObjectContext.ExecuteFunction ( "InsertDynamicImage", imageIdParameter, imagePathParameter, imageCategoryParameter); }} Мой код контроллера приведен ниже [HttpPost] [Маршрут ( "апи / tblProducts / DynamicImage")] общественность IHttpActionResult AddDynamic (tblImage обзор) {если (! ModelState. IsValid) {вернуть BadRequest (ModelState); } Вар AltAddress = db.InsertDynamicImage (Review.ImageId, Review.ImagePath, Review.ImageCategory); вернуться CreatedAtRoute ( "DefaultApi", новый {идентификатор = Review.ImageId}, обзор); } Сообщения об ошибке дается стелькой показано ниже { «Сообщение»: «Произошла ошибка.», «ExceptionMessage»: «UrlHelper.Link не должен возвращать нуль.», «ExceptionType»: «System.InvalidOperationException», «StackTrace»: "в System.Web.Http.Results.CreatedAtRouteNegotiatedContentResult`1.Execute () \ г \ п на System.Web.Http.Results.CreatedAtRouteNegotiatedContentResult`1.ExecuteAsync (CancellationToken CancellationToken) \ г \ п на System.Web.Http. Контроллеры.
Akshay Tomar
1

голосов
0

ответ
186

Просмотры

Как создать веб-апи JWT и применять в веб-приложений ASP.NET 2.0 ядра?

В настоящее время я занимаюсь разработкой веб-приложений с использованием ASP.NET 2.0 ядро ​​и мне нужно применить JWT аутентификации веб-API в моем веб-приложение. Из моих исследований, я нашел примеры для asp.net ядра 1.0, но не мог найти для ASP.NET 2.0. В чем разница между JWT в ядре 2.0 и Ядра 1.0? Есть ли какой-либо ссылки, которые я могу обратиться? Заранее спасибо.
fai
1

голосов
1

ответ
50

Просмотры

Операции AngularJS POST всегда проходят идентификатор нуля; Результаты в 405 методе не допускаются

Этот вопрос относится к другому сообщению, я сделал несколько недель идут, что здесь: Web API Routing - Перегруженный метод GET вызывает 405 Method Not Allowed для других глаголов, я понял, что проблема была там, но это довольно сложно, поэтому я создал это отдельное вопрос в надежде кого-то может обеспечить решение. У меня есть приложение Web API, который вызывается как в AngularJS приложения и приложения с веб-форм ASP.NET. У меня возникли проблемы с одним контроллером API, в частности, которая занимается UserAccounts. Это происходит только тогда, когда приложение AngularJS потребляет API; приложение веб-формы не имеют этой проблемы. Следующие операции поддерживаются в API: GET (один, с помощью Int «ID») GET (все) DELETE POST PUT В случае этого один конкретного контроллера также должно поддерживать GET строки «имя пользователя» перегрузка. Я должен был использовать маршрутизацию атрибутов, чтобы отличить эту конкретную операцию от GET по ИНТ «ид» версии. Вот сигнатуры методов в моем API: [HttpDelete] [ResponseType (TypeOf (учетная_запись_пользователя))] [Маршрут ( "~ / апи / UserAccounts / {идентификатор: INT}")] общественность асинхронной Task DeleteUserAccount (интермедиат ид) [HttpGet] [ResponseType (TypeOf (учетная_запись_пользователя))] [Маршрут ( "~ / апи / UserAccounts / {идентификатор: INT}")] общественность асинхронной Task GetUserAccount (интермедиат ид) [HttpGet] [ResponseType (TypeOf (EnrollmentApiAccountDto))] [Маршрут ( "~ / API / UserAccounts / {имя_пользователь}")] общественность асинхронной Task GetUserAccount (строка имя пользователь) [HttpGet] [Маршрут ( "~ / API / UserAccounts")] общественный IQueryable GetUserAccounts () [HttpPost] [ResponseType (TypeOf (учетная_запись_пользователь ))] [Маршрут ( "~ / API / UserAccounts" )] Общественный асинхронной Task PostUserAccount (UserAccount UserAccount) [HttpPut] [ResponseType (TypeOf (аннулируется))] [Маршрут ( "~ / апи / UserAccounts / {идентификатор: INT}")] общественность асинхронной Task PutUserAccount (интермедиат идентификатор, учетная_запись_пользователь UserAccount ) Мой ресурс определяется как это в моем приложении AngularJS: вар UserAccounts = $ ресурса ( 'HTTP: // локальный: 62415 / API / UserAccounts /: идентификатор'), {ID: '@Id'}, {создать: {метод : 'POST'}, получим: {метод: 'GET'}, запрос: {метод: 'GET', IsArray: истинно} удалить {метод: 'DELETE'}, обновление: {метод: 'PUT'}} ); В моем контроллере AngularJS, я использую этот код: если ($ scope.userAccount.id) appFactory.userAccounts.update ({идентификатор: $ scope.userAccount.id}, $ scope.userAccount). $ Promise.then (OnSuccess) .catch (OnError); еще appFactory. . UserAccounts.create ($ scope.userAccount) $ promise.then (OnSuccess) .catch (OnError); В принципе, для нового UserAccount записи, $ scope.userAccount.id равен нулю и POST выполняется (POST в "API / UserAccounts / 0"). Свойство «Идентификатор» присваивается ненулевое значение, когда запись вставляется в базу данных (она определена в качестве ключевого поля первичной / идентичности). Если оно не равно нулю, мы предполагаем, что это существующая запись и PUT выполняется таким образом, существующая запись может быть обновлена. Когда я выполняю POST в AngularJS приложения, я получаю ответ 405 Method Not Allowed. Я вижу это в ответ при использовании Fiddler: Разрешить: DELETE, GET, PUT { "$ ID": "сообщение", "1",: "Запрашиваемый ресурс не поддерживает метод HTTP 'POST'"} УДАЛИТЬ, GET -она и PUT операции все принимать «идентификатор» аргумент. POST не делает и не входит в число разрешенных HTTP глаголов. Таким образом, кажется, что наличие «ID» аргумент является причиной POST на провал. Когда я вызываю API из приложения веб-форм, маршрут для POST всегда «API / UserAccounts», и нет «идентификатора» переданного аргумента. Из-за этого, операция POST всегда успешно. Как только я понял это, я использовал Скрипач для повторного выполнения неудавшейся операции POST из приложения AngularJS, однако на этот раз используя маршрут без «ид» аргумента. Это удалось. Следует отметить, что существует множество других контроллеров API в этом приложении и передавая «идентификатор» ноль для POST из приложения AngularJS не имеет негативное влияние, хотя технически это не правильно. Это только становится проблемой, когда у нас есть метод GET, который принимает строку в качестве аргумента, когда уже существует метод GET, который принимает аргумент Int. Я попытка передать «идентификатор» нуль новых записей в приложении AngularJS, но проверка ModelState не удалось, и я получил 400 Bad Request. Это свойство является первичным ключом в базе данных, поэтому он должен иметь значение. Так что мой вопрос, для операции POST наступающей из моего приложения AngularJS, как я опускаю «ID» значение, так как это не имеет значения? Может ли AngularJS спецификация ресурса будет изменена таким образом, «идентификатор» аргумент не является обязательным для данного типа операции, или мне нужно иметь различный ресурс для HTTP глаголов, которые делают и не поддерживают «ID» аргумент? но проверка ModelState не удалось, и я получил 400 Bad Request. Это свойство является первичным ключом в базе данных, поэтому он должен иметь значение. Так что мой вопрос, для операции POST наступающей из моего приложения AngularJS, как я опускаю «ID» значение, так как это не имеет значения? Может ли AngularJS спецификация ресурса будет изменена таким образом, «идентификатор» аргумент не является обязательным для данного типа операции, или мне нужно иметь различный ресурс для HTTP глаголов, которые делают и не поддерживают «ID» аргумент? но проверка ModelState не удалось, и я получил 400 Bad Request. Это свойство является первичным ключом в базе данных, поэтому он должен иметь значение. Так что мой вопрос, для операции POST наступающей из моего приложения AngularJS, как я опускаю «ID» значение, так как это не имеет значения? Может ли AngularJS спецификация ресурса будет изменена таким образом, «идентификатор» аргумент не является обязательным для данного типа операции, или мне нужно иметь различный ресурс для HTTP глаголов, которые делают и не поддерживают «ID» аргумент?
DesertFoxAZ
1

голосов
0

ответ
473

Просмотры

Net core 2.0 error running Web Api “Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]”

Я делаю в 2.0 приложения Net Core. У меня есть несколько веб-Апи проекты, которые я начал из командной строки .. C: \ отлаживать directore \ DotNet prj.dll Это запускает службу на портах, указывающих на файл программы государственной статической IWebHost BuildWebHost (строка [] арг) => WebHost.CreateDefaultBuilder ( арг) .UseStartup () .UseKestrel (опции => {options.Listen (IPAddress.Loopback, 5000); options.Listen (IPAddress.Loopback, 5001);}) Строить (); Оказывается, этот экран Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [0] Профиль пользователя доступно. Использование 'C: \ Users \ l0658073 \ AppData \ Local \ ASP.NET \ DataProtection-Keys', как ключевое хранилище и Windows, DPAPI для шифрования ключей в покое. Хостинг среда: Производство Содержание корневой путь: C: \ Debug \ netcoreapp2.0 Теперь прослушивает: HTTP: //127.0.0.1:5000 Сейчас слушает: http://127.0.0.1:5001 И все работает нормально, но вдруг он перестал работать правильно .... Когда я запускаю проекты Он появляется только PS C: \ Debug \ netcoreapp2 +0,0> DotNet INOMSmartrouting.dll информация: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [0] профиль пользователя доступно. Использование 'C: \ Users \ l0658073 \ AppData \ Local \ ASP.NET \ DataProtection-Keys', как ключевое хранилище и Windows, DPAPI для шифрования ключей в покое. порты не появляется. Я вижу в диспетчере задач, и каждый процесс использует 25% Пор память. Что случилось? Что мне не хватает? Спасибо Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [0] Профиль пользователя доступно. Использование 'C: \ Users \ l0658073 \ AppData \ Local \ ASP.NET \ DataProtection-Keys', как ключевое хранилище и Windows, DPAPI для шифрования ключей в покое. порты не появляется. Я вижу в диспетчере задач, и каждый процесс использует 25% Пор память. Что случилось? Что мне не хватает? Спасибо Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [0] Профиль пользователя доступно. Использование 'C: \ Users \ l0658073 \ AppData \ Local \ ASP.NET \ DataProtection-Keys', как ключевое хранилище и Windows, DPAPI для шифрования ключей в покое. порты не появляется. Я вижу в диспетчере задач, и каждый процесс использует 25% Пор память. Что случилось? Что мне не хватает? Спасибо
Diego
1

голосов
1

ответ
116

Просмотры

Извлечение табличных данных наряду с данными больших двоичных объектов с использованием Web API

Я пытаюсь выборку записей из таблицы базы данных Oracle, используя веб-интерфейс API из матер таблицы страны, имеющие столбцы «COUNTRYNAME», «COUNTRYCODE» и «имидж страны» (BLOB). Я не в состоянии включить столбец блоба наряду с другими данными: Текущий код: // Доступ к данным (Repository) слой для извлечения данных с использованием Dapper общественного переопределения IQueryable GetCountryList () {строка запроса = «выберите COUNTRYNAME, COUNTRYCODE из страны»; connection.Open (); вернуть connection.Query (запрос) .AsQueryable (); } // контроллер Web API общественного IHttpActionResult Получить () {уаг JsonResponse =; вернуться Ok (. GetCountryList () ToList ()); } Ожидаемый результат: Я хочу, чтобы включить столбец CountryImage, который BLOB типа наряду с существующими столбцами (запрос ниже для справки). т.е. "выберите COUNTRYNAME, COUNTRYCODE, CountryImage из страны"; Я буду потреблять эти данные в моем угловом приложении.
Tushar
1

голосов
0

ответ
83

Просмотры

Как настроить я Ninject работать с log4net?

У меня есть базовый код веб-API, который использует Ninject. До сих пор я не был на самом деле регистрации ничего, а просто отправив объект BadRequest в случае, если что-то не так. При том, что код работает отлично, я хочу, чтобы добавить некоторое протоколирование (может быть только информация, ошибка или отладки в случае необходимости), и я использовал эту статью в качестве моего руководства. http://devthings.com.ua/logging-in-asp-net-web-api-using-log4net-and-elasticsearch/ Эта статья использует рамки Unity и использует MVC, а не код API, так что я не смог перевести этот код в Ninject правильно. Я не понимаю, шаг # 4, где он настраивает UnityFilterProvider, что именно это единство здесь делать? Что эквивалент в Ninject?
Subrato M
1

голосов
1

ответ
463

Просмотры

403 запрещен доступ запрещен произошедшая ошибка, когда использовать веб-API в другом компьютере в локальной сети

Мне нужно, чтобы получить доступ к веб-API для доступа к другому компьютеру, который находится в локальной network.for с этой целью я публикую этот API и организованный IIS. мой компьютер, а другой компьютер (который я собираюсь получить доступ к API) пингуется без каких-либо ошибок, а также я уже доступен этот API через другой компьютер успешно. но, к сожалению, сегодня на словах я не мог бы получить к нему доступ. это произошла ошибка, я пытался много вещей, в соответствии со следующим order.but он не работает. Добавлено runAllManagedModulesForAllRequests = «истина» в моем web.config (в веб-API опубликовать папку). Чтение, запись, изменять права доступа к сетевой службе, IUSR, IIS_IUSRS. Отключение защиты от вирусов брандмауэра. Эта ошибка появляется в другом компьютере (которым я собираюсь Асесс к API). Пожалуйста заметьте: я смог открыть API вчера,
Sachith
1

голосов
0

ответ
983

Просмотры

Получение ERR_SPDY_PROTOCOL_ERROR ошибки в угловых приложениях на освежающей странице

Я работаю над угловыми 2 приложения, потребляющего Web API 2, то есть разработки в .NET Ядра 2.0. моя реализация не работает до сих пор без проблем до сих пор. для первого экземпляра нажмите события Web API потребляет успешно и любое обновление страницы или же цикл, начиная только для этой конкретной ошибки код броска ERR_SPDY_PROTOCOL_ERROR коды, который вызывает ошибку @Component ({селектор: «ток-ответ ссылка», templateUrl:»./current -responses.template.html 'styleUrls: [' ./current-responses.style.scss'], провайдеры: []}) экспорт класс CurrentResponsesReferencesComponent реализует OnInit {личное мнение: BehaviorSubject; частные consultationResponses: ConsulationResponsesIdListDataModel; частный responseCurrentState: ResponseCurrentStateDataModel; конструктор (частный DATASERVICE: ConsultationResponsesListDataService, частный маршрутизатор: маршрутизатор, частная сессия: SessionStorageService) {} ngOnInit (): пустота {this.view = новый BehaviorSubject (нуль); this.consultationResponses = новый ConsulationResponsesIdListDataModel (); this.loadData (); } Общественных LoadData (): пустота {вар consultationId = this.session.getItem ( 'consultationId'); // Следующий код вызывает ошибку считают, где аналогичный код некоторых еще работает отлично this.dataService.getConsultationResponsesList (consultationId) .subscribe (данные => {отладчик; this.view.next (данных); console.log ( "список отклики ... .", данные); }); } Выше коды с использованием в следующем шаблоне компонента этого код перемещаться из другого компонента в качестве this.router.navigate ([ «модулей / newResponseQuestions»]); .. @Component ({селектор: '
Toxic
1

голосов
1

ответ
67

Просмотры

приложение Asp.net MVC не может быть организовано и работает должным образом

Я столкнулся с проблемой, которая не была решена до сих пор, и сделать это в течение трех недель. Я должен создать веб-приложение, выполните следующие действия: 1 Разрешить пользователю выбрать критерии поиска из выпадающего списка и нажмите кнопку экспорта. 2- событие нажатия кнопки называет API, который в свою очередь извлекает данные из хранилища данных на основе критериев поиска, открывает существующий файл шаблона Excel и заполнить его возвращаемые данные, и сохранить его с новым именем (например, оригинальный шаблон с именем abc.xlsx, и он будет сохранен как а [дата] - [время] .xlsx). 3 Наконец, загрузите вновь созданный файл Excel. Я создал приложение и на среду разработки он сделал первые два шага успешно, когда я устал, чтобы развернуть приложение на любой моей локальной машине IIS, или на сервере IIS приложение сделал только первый шаг и часть второго (т.е. извлечение данных из хранилища данных), тем не менее, все остальные шаги не могут быть достигнуты. Вот мой код:... $ ( "# Dataexporter") нажмите (функция () {если ($ ( "#") countrycriteria знач () ToString () === "0" || $ ( "# productcriteria") .val () ToString () === "0") {$ ( 'от') присоединять ( 'Пожалуйста, убедитесь, что вы выбрали все необходимые поля!');.}. еще {$ ( 'DIV [класс =» бдительные-предупреждение "] ') удалить. (); $ (это) .prop (' отключено», правда); $ .ajax ( "апи / exportify / экспорт countrycriteria =" + $ ( "# countrycriteria"?) вал. () .ToString () + "& productcriteria =" + $ ( "# productcriteria"). вал (). ToString (), {Типа: "GET", CONTENTTYPE: "приложения / JSON, кодировка = UTF-8", успех: функция (ответ, textStatus, jqXHR) {если (! Ответ == NULL) window.location.href = JSON.parse ( ответ) .downloadurl $ (это) .prop ( 'отключено', ложь); }, Ошибка: функция (jqXHR, textStatus, errorThrown) {Alert ( 'Ошибка' + errorThrown); $ (Это) .prop ( 'отключено', ложь); }}); }}); [RoutePrefix ( "апи / exportify")] ExportController общественного класса: BaseController {частного поставщика IExporterProvider; частный Invoker Вызывающий; общественного ExportController () {переключатель (AppConfiguration. ExporterProvider) {случай "Excel": Provider = новый ExcelExporterProvider (); перерыв; по умолчанию: певд NotImplementedException (); } Вызывающий = новый Чешуи (); invoker.Commands.Add (provider.GetExporter ()); } Частная IEnumerable GetData (строка countrycriteria, строка productcriteria) {вернуться helper.SelectByCountryAndProduct (countrycriteria, productcriteria); } Частный словарь GetResponseContent () {строка имя_файла = AppConfiguration.SaveAsName; INT lastBackslash = fname.LastIndexOf ( "\\"); INT substringLength = fname.Length - lastBackslash; Строка файла = fname.Substring (lastBackslash + 1, substringLength - 1); вернуть новый словарь {{ " NoContent, string.Empty); }} Улов (Исключение е) {возвращение содержимого (HttpStatusCode.InternalServerError, д); }}} Вот код, который будет в конечном счете, будет выполняться, когда invoker.Execute (); Заявление удара: (! File.Exists (Path.Combine (AppDomain.CurrentDomain.BaseDirectory, AppConfiguration.Temporaryfolder, AppConfiguration.Filename + AppConfiguration.FileExtension))) общественный класс ExcelExporter {защищен статический сила ExportToExcel (IEnumerable данные) {если {бросок новый FileNotFoundException ( «Файл не найден \ NThe просил analytical.xlsx не был найден на сервере.»); } Microsoft.Office.Interop.Excel.Application XLSX = новый Microsoft.Office.Interop.Excel.Application (); Рабочая тетрадь рабочая тетрадь = NULL; Рабочий лист Рабочий лист = NULL; попробовать {Учебное пособие = xlsx.Workbooks.Open (Имя файла: Path.Combine (AppDomain.CurrentDomain.BaseDirectory, AppConfiguration.Temporaryfolder, AppConfiguration.Filename + AppConfiguration.FileExtension), ReadOnly: ложь); рабочий лист = (Рабочий лист) workbook.Worksheets [1]; список List = данные (список); для (INT I = 0; я <list.Count; я ++) {worksheet.Range [String.Format ( "{0}", I + 2)] Значение = список [I]. .ProductShare; . Worksheet.Range [String.Format ( "Б {0}", г + 2)] Значение = Список [I] .MarketPotential; . Worksheet.Range [String.Format ( "C {0}", г + 2)] Значение = Список [I] .RepresnentativeName; worksheet.Range [String.Format ( "D {0}", г + 2)]. Значение = Список [I] .DoctorName; . Worksheet.Range [String.Format ( "Е {0}", г + 2)] Значение = Список [I] .CustomerCode; . Worksheet.Range [String.Format ( "Р {0}", г + 2)] Значение = Список [I] .Specialization; . Worksheet.Range [String.Format ( "G {0}", г + 2)] Значение = Список [I] .ProductName; . Worksheet.Range [String.Format ( "Н {0}", г + 2)] Значение = Список [I] .Category; }} Поймать (Exception е) {певд Exception ( "Ошибка при обработке файла", е); } Наконец {AppConfiguration.SaveAsName = Path.Combine (AppDomain.CurrentDomain.BaseDirectory, AppConfiguration.Temporaryfolder, AppConfiguration.Filename + DateTime.Now.ToString ( "ггггммдд-ччммсс")); workbook.SaveAs (Имя файла: AppConfiguration.SaveAsName, FileFormat: XlFileFormat.xlOpenXMLWorkbook); workbook.Close (SaveChanges: истинно); xlsx.Quit (); Marshal.ReleaseComObject (рабочий лист); Marshal.ReleaseComObject (учебное пособие); Marshal.ReleaseComObject (XLSX); }}} Вот как IIS фичи выбран / установлен как на моей локальной машине IIS или сервере IIS: Web Management Tools -> World Консоль управления IIS Wide Особенности развития Web Services Application -> Расширяемость .NET 3.5, .NET расширяемость 4,7 , ASP.NET 3.5, ASP.NET 4.7, CGI, ISAPI Extensions, ISAPI Filters Общие функции HTTP -> Документ по умолчанию, Direct Просмотр, ошибки HTTP, Static Content Здоровье и диагностика -> HTTP Logging Функциональные особенности -> Static Content Compression безопасности - > Фильтрация запросов Я также дал оба IIS_IUSERS / администраторам полные права управления на публикации папку, на которую направлен на веб-сайте IIS. Я также настроил следующие Службы компонентов для Excel Component Services -> Компьютеры -> Мой компьютер -> Настройка DCOM -> Microsoft Excel Application -> Свойства Level Authentication -> Запуск None Безопасность и активация разрешений ** -> Настройка -> Администраторы / IIS_IUSERS имеют полный доступ прав доступа -> Настройка -> Администраторы / IIS_IUSERS имеют полные права доступа Настройка разрешений -> Настройка -> Администраторы / IIS_IUSERS имеют полные права доступа я все еще возникают проблемы, начиная с открытия существующего шаблона Excel файл шаблона, который блокирует остальные ступеньках приложение от выполняется, как я должен открыть файл,
Amr.Mohammad87
1

голосов
0

ответ
766

Просмотры

Создать PDF из ApiController с помощью Rotativa и WebAPI

Я хочу, чтобы создать файл в формате PDF с использованием базы Rotativa из ApiController. По моему проекту нет какой-либо вид. Содержание PDF (HTML) находится в базе данных. Есть ли какой-либо способ создания PDF без вида и ControllerContext? Контекст Контроллер доступен только в контроллере не APIController ... Я нашел это https://github.com/JustMaier/Rotativa/tree/ed7678eefdffb3995f5b6a3e9afb18903c648df8, но она нуждается View Проблема в методе Buildfile () ... Начните отсюда вар = новый Rotativa.ViewAsPdf (pdfResult); a.FileName = request.ResultFileName; байт [] F = a.BuildFile (); ControlerContext может быть пустым здесь публичные байты [] Buildfile (ControllerContext контекст = NULL) {если (== this.WkhtmlPath string.Empty) this.WkhtmlPath = контекст == нуля? HttpContext.Current.Server.MapPath ( "~ / Rotativa"): context.HttpContext.Server. MapPath ( "~ / Rotativa"); вар fileContent = this.CallTheDriver (контекст); если (string.IsNullOrEmpty (this.SaveOnServerPath) == FALSE) {File.WriteAllBytes (this.SaveOnServerPath, fileContent); } Вернуть fileContent; } ... но здесь не защищен переопределение байт [] CallTheDriver (ControllerContext контекст) {// использование имя действия, если имя вида не была предоставлена ​​строка VIEWNAME = ViewName; если (string.IsNullOrEmpty (ViewName)) ViewName = context.RouteData.GetRequiredString ( "действие"); ViewEngineResult ViewResult = GetView (контекст, ViewName, MasterName); Строка HTML = context.GetHtmlFromView (ViewResult, ViewName, модель); байт [] fileContent = WkhtmltopdfDriver.ConvertHtml (this.WkhtmlPath, this.GetConvertOptions (), HTML); вернуться fileContent; } Что я делаю неправильно ?
emerog
1

голосов
0

ответ
53

Просмотры

WebAPI принимать только 4079 символов в теле POST

Я разработки мобильных приложений Ионные 3 и с помощью ASP.NET REST WebAPI 2, как мой задний конец. Я пытался передать строку base64 (около 150Kb большого enocoded PNG изображения) к одному из моих методов WebAPI без какого-либо успеха за последнюю пару дней. Мой API метод вызова, что я звоню в моей WebAPI Проблема заключается в том, что WebAPI, кажется, не получают никаких значений, как показано здесь, я посылаю мои данные с этих HEADERS При дальнейшем осмотре я заметил следующее. Я перехватил апи вызов Почтальон и обнаружил, что WebAPI получает данные, но обрезает данные в 4079th характера, как показано здесь. Так как WebAPI кажется, вырезать строку JSON в 4079th характера, сам JSON не является полным, который (я предполагаю, что) является причиной того, почему WebAPI может» т прочитать его, а также, почему значения пусты при отладке метод WebAPI в Visual Studio. Вот еще одна интересная вещь. В инструментах развития Chrome в разделе Network я могу видеть вызов API со всей дополнительной информацией. Chrome также показывает полную строку base64, как показано здесь. Кто-нибудь есть какие-либо идеи, что здесь происходит? Кто-нибудь еще испытал подобные проблемы раньше? UPDATE 1: Я просто добавил это к моему Web.config, как @evayly предложил. Я также попытался регулировать следующие значения: maxAllowedContentLength maxRequestLength Сеть САШ: MaxJsonDeserializerMembers, но это не решило проблему. UPDATE 2 Другая часть интересной информации: Если я вручную редактировать перехваченное сообщение в Почтальон, добавив закрывающие теги JSON - "} и отправить его, метод считывает данные без каких-либо проблем.
Aljosa
1

голосов
1

ответ
218

Просмотры

IIS возвращающихся 400 - недостающее Содержание ошибки

Я бегу IIS версии 8.5 на Windows Server 2012 R2. Сайт является API обработки запросов по протоколу HTTPS (TLS 1.2). Один из концов принимает JSON преобразованных в последовательной форме данные через PUT (команда / глагол). Данные могут быть успешно переданы до определенного размера, который составляет около 8 МБ. Для наборов данных больше, чем клиент получает странное сообщение об ошибке HTTP: 400 - Missing Content. Я включил правило трассировки на сервере IIS для ошибки 400 и можно видеть, в какой точке следа, что 400 - Missing Content посылается ответ. Тем не менее, я не могу расшифровать, что может быть пойдет не так в событиях до этого. Все, что я могу заметить, что данные считываются в кусках 16299 байт для количества раундов. А потом вдруг количество прочитанных байтов меньше (12506 байт), и мы получаем такую ​​последовательность событий: 1288. GENERAL_SET_RESPONSE_HEADER HeaderName = "X-ASPnet-версия", HeaderValue = "4.0.30319", Заменить = "истина" 07: 20: 19,043 1295. MODULE_SET_RESPONSE_ERROR_STATUS Предупреждение ModuleName = "ManagedPipelineHandler", Уведомление = "EXECUTE_REQUEST_HANDLER", HttpStatus = "400" , HttpReason = «отсутствует содержание», HttpSubStatus = «0», ErrorCode = «операция успешно завершена. (0x0)», ConfigExceptionInfo = «» Я также включен подробный ответ ошибки от IIS в сторону клиента, но, возвращенное сообщение не содержит ничего полезного (просто включить трассировку, которые я уже сделал). Вот отрывок из того, что возвращается в случае, если кто-то интересно: Ошибка HTTP 400.0 - отсутствует содержание Bad Request Наиболее вероятные причины: Вещи, которые вы можете попробовать: Создать правило трассировки, чтобы отслеживать невыполненные запросы для этого HTTP-коды статуса. Дополнительные сведения о создании правила трассировки для невыполненных запросов, нажмите здесь. Кто-нибудь знает, что может быть причиной этого? Или, какого рода отладки подхода я мог бы предпринять для того, чтобы получить больше понимания в проблеме?
Gros Lalo
1

голосов
1

ответ
221

Просмотры

возникли проблемы с доступом к развязности в Web API на удаленных среды?

Я настроил Swagger для моего Web API 2.2 приложения и загружает локально, но я получаю ошибку CORS при попытке доступа к нему на удаленном сервере. Кроме того, чтобы добраться до страницы развязности, я должен быть очень четко с URL. Например: https://example.com/swagger/ui/index В противоположность: example.com/swagger/ Я думаю, что я встретил несколько аналогичный вопрос о предыдущем проекте, где я должен был обеспечить полный явный URL, как показано в мой первый пример, но на этом предыдущем проекте, используя длинную форму URL отображается на странице рабочего чванства, как ожидалось. Является ли это из-за HTTPS конфигурации? Есть специальная настройка развязности, которая может быть настроена так, чтобы короткий URL в среде HTTPS? На удаленных серверах появляется следующее сообщение об ошибке, которое появляется четко указывает на ошибку CORS: «Не удается прочитать с сервера.
user9393635
1

голосов
1

ответ
219

Просмотры

Возвращаясь к IHttpActionResult

У меня есть следующий код ниже. общественного IHttpActionResult Войти ([FromBody] LoginVM Логин) {BOOL isAuthenticated = EmployeeSecurity.Login (login.quad, login.password); если (isAuthenticated) {вар ответ = Request.CreateResponse (HttpStatusCode.OK, "Уполномоченный"); response.Headers.Add ( "маркера", "тест"); response.Headers.Add ( "TokenExpiry", "testdate"); response.Headers.Add ( "Роль", "testrol"); response.Headers.Add ( "Access-Control-Expose-Headers", "Маркер, TokenExpiry"); вернуться Content (HttpStatusCode.OK, ответ); } Возвращение Content (HttpStatusCode.Unauthorized, "Пожалуйста, проверьте QUAD или пароль."); } У меня есть следующая ошибка «Ошибка при получении значения из„ReadTimeOut“на '
Aatish Kumar
1

голосов
0

ответ
369

Просмотры

Сделать веб-апи содержание контроллер чтения вместо того, чтобы использовать lazystreamcontent

У меня есть следующий метод в контроллере веб-API: [HttpPost] [Маршрут ( "апи / Logs")] общественность асинхронной Task AddLogsAsync ([FromBody] Список logList) {если (logList.Count> 0) {с помощью (вар базы данных = новый DatabaseContextHandler ()) {ждут database.AddLogsAsync (logList); }} Возврата OK (); } Это обычно работает, пока я не попробовал послать 6.7 MB JSON logList к нему и получил NullReferenceException на (logList.Count> 0), что, очевидно, означает, что logList был нулевым. После подтверждения моего JSON был отформатирован я повторно отослано тот же JSON, на этот раз во время отладки API, и увидел, что не только logList был нулевым, но Request.Content отображались в LazyStreamContent, который я предполагаю, как контроллер обрабатывает несколько большое содержание органов. Я мог бы назвать ReadAsStringAsync (), затем десериализации его внутри метода, но это означает, что я должен был бы сделать это изменение к каждому контроллеру, чтобы избежать этой проблемы где-то еще позже. Так что мой вопрос, есть ли какой-нибудь способ предотвратить контроллер использовать LazyStreamContent? Сделать это всегда читать запрос полностью перед входом в метод? Я пытался копаться в документации, но не может найти любую конфигурацию, которая, казалось, сделать что-то вроде этого.
Lucas
1

голосов
1

ответ
56

Просмотры

C # Как в очередь запросов пользователей и отвечать на них по одному

У меня есть один экземпляр COM службы (применение системы) на моем сервере, что мои методы API WEP называют его функции. служба ком может обрабатывать только один запрос и отвечать его и после этого, процесс следующий. моя идея очередь; массовое обслуживание запросов пользователей и отвечать на них один за другим; но из-за очереди, я не знаю, как вернуть ответ пользователей; пожалуйста, помогите мне в реализации подходящего сценария или любой другой идеи. Спасибо большое.
Masoud
1

голосов
0

ответ
42

Просмотры

Как использовать API / счета / в Asp.Net РегистрацияВойти Каталог веб-API 2

Я хочу использовать почтальон текст внешнего AUTH Google. У меня есть не только маркер доступа, что Google предоставляет, но и этот URL: HTTP: // локальный: 56099 / API / Account / ExternalLogin? Поставщик = Google & response_type = маркер и client_id = сам & redirect_uri = HTTP% 3A% 2F% 2Flocalhost% 3A56099% 2F & состояние = pqUYyRJkopKQJhW4a5G6WKOxs1lpDlQSXs3iCRUMUyQ1 Это дает 200 OK ответа и показывает главную страницу моего сайта, но до сих пор при использовании других методов, таких как счета / USERINFO это дает unauthorize пользователь. Что я могу сделать?
Kunal Burangi
1

голосов
1

ответ
63

Просмотры

.NET WebAPI - Как получить файл с дополнительными параметрами?

Noob вопрос здесь, я пытаюсь отправить файл с одним добавленным параметром строки. Мой класс загрузчика выглядит следующим образом: общественное статического пустоте HttpUploadFile (строка URL, строки файл, строки ParamName, струнный CONTENTTYPE, NameValueCollection NVC) {строка граничного = «------------------ ---------»+ DateTime.Now.Ticks.ToString ( "х"); байт [] boundarybytes = System.Text.Encoding.ASCII.GetBytes ( "\ г \ N-," + граница + "\ г \ п"); HttpWebRequest WR = (HttpWebRequest) WebRequest.Create (URL); wr.ContentType = "многочастному / форм-данных; граница =" + граница; wr.Method = "POST"; wr.KeepAlive = TRUE; wr.Credentials = System.Net.CredentialCache.DefaultCredentials; Поток Rs = wr.GetRequestStream (); Строка formdataTemplate = "Content-Disposition: форм-данных; имя = \" {0} \ "\ г \ п \ г \ п {1}"; Еогеасп (строка ключа в nvc.Keys) {rs.Write (boundarybytes, 0, boundarybytes.Length); Строка FormItem = String.Format (formdataTemplate, ключ, NVC [ключ]); байт [] formitembytes = System.Text.Encoding.UTF8.GetBytes (FormItem); rs.Write (formitembytes, 0, formitembytes.Length); } rs.Write (boundarybytes, 0, boundarybytes.Length); Строка HeaderTemplate = "Content-Disposition: форм-данных; имя = \" {0} \ "; имя файла = \" {1} \ "\ г \ nContent-тип: {2} \ г \ п \ г \ п" ; заголовок строки = string.Format (HeaderTemplate, ParamName, файл CONTENTTYPE); байт [] headerbytes = System.Text.Encoding. UTF8.GetBytes (заголовок); rs.Write (headerbytes, 0, headerbytes.Length); FileStream FileStream = новый FileStream (файл, FileMode.Open, FileAccess.Read); байт [] буфера = новый байт [4096]; INT BytesRead = 0; в то время как ((BytesRead = fileStream.Read (буфер, 0, buffer.Length))! = 0) {rs.Write (буфер, 0, BytesRead); } FileStream.Close (); байт [] = прицеп System.Text.Encoding.ASCII.GetBytes ( "\ г \ N-," + граница + "- \ г \ п"); rs.Write (прицеп, 0, trailer.Length); rs.Close (); WebResponse wresp = NULL; попробовать {wresp = wr.GetResponse (); Поток stream2 = wresp.GetResponseStream (); StreamReader reader2 = новый StreamReader (stream2); Результат переменная = reader2.ReadToEnd (); } Задвижка (Исключение ех) {Program.log.Error (. System.Reflection.MethodBase.GetCurrentMethod () Название + "Ошибка при преобразовании файла", ех); если (! wresp = NULL) {wresp.Close (); wresp = NULL; }} {Наконец, WR = NULL; }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо ReadToEnd (); } Задвижка (Исключение ех) {Program.log.Error (. System.Reflection.MethodBase.GetCurrentMethod () Название + "Ошибка при преобразовании файла", ех); если (! wresp = NULL) {wresp.Close (); wresp = NULL; }} {Наконец, WR = NULL; }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо ReadToEnd (); } Задвижка (Исключение ех) {Program.log.Error (. System.Reflection.MethodBase.GetCurrentMethod () Название + "Ошибка при преобразовании файла", ех); если (! wresp = NULL) {wresp.Close (); wresp = NULL; }} {Наконец, WR = NULL; }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо Имя + «Произошла ошибка при преобразовании файла», экс); если (! wresp = NULL) {wresp.Close (); wresp = NULL; }} {Наконец, WR = NULL; }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо Имя + «Произошла ошибка при преобразовании файла», экс); если (! wresp = NULL) {wresp.Close (); wresp = NULL; }} {Наконец, WR = NULL; }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо }} Параметры строковые находятся внутри NameValueCollection. Теперь, как следует с другой стороны, метод пост, получить его? * Кроме того, в этом случае, когда я Смешать параметры файла + строки, если тип контента будет «приложения / октет-поток»? Спасибо
Aa Yy
1

голосов
1

ответ
914

Просмотры

Загрузить файл с угловых 6 до Web API

Загрузить изображение с угловых 6 до Web API 2, я был успех от почтальона, но не из моего углового приложения. Я использую многие учебные пособия, как: 1) https://www.youtube.com/watch?v=c61wr1ZsHzY, 2) https://www.youtube.com/watch?v=YkvqLNcJz3Y&t=534s, но в любое время я падаю на если (! request.Content.IsMimeMultipartContent ( "форма-данные")) {вернуться BadRequest ( "неподдерживаемый тип носителя"); } Что я упускаю? Единственное изменение состоит в том, что в моем Угловом я использую перехватчик и заголовки идет как: REQ = req.clone ({setHeaders: { 'Content-Type': 'применение / JSON, кодировка = UTF-8', 'Accept': 'приложения / JSON', 'Авторизация': `Bearer $ {decodedString}`,},}); весь код остальные exacly как первый учебник, если вы, ребята, нужно больше информации, пожалуйста, дайте мне знать, спасибо
Adi Dui Levy
2

голосов
0

ответ
24

Просмотры

Using Web API TransactionScope and SQl Server in-memomery Table Issue

Всякий раз, когда я доступ к хранимой процедуре, которая имеет таблицу в памяти через Web API TransactionScope Я получаю сообщение об ошибке сильфона. Текущая транзакция не может быть совершено, и не может поддерживать операции, запись в файл журнала. Откат транзакции. Текущая транзакция не может быть совершено, и не может поддерживать операции, запись в файл журнала. Откат транзакции. Текущая транзакция не может быть совершено, и не может поддерживать операции, запись в файл журнала. Откат транзакции. Нефиксируемая транзакция обнаруживаются в конце пакета. Транзакция откатывается назад я попытался выполнить эту же хранимую процедуру непосредственно в SQL Management Studio это работает отлично, а также, когда я удалить TransactionScope из веб-API также он работает нормально. Но я хочу использовать TransactionScope внутри Web API Внутри процедуры магазина, я поставил следующие вещи SET NOCOUNT ON; SET TRANSACTION ИЗОЛЯЦИЯ LEVEL READ UNCOMMITTED; НАЧАТЬ TRY ВЫБРАТЬ Itemid ИЗ SAMPLE_IN_MEMORY_TABLE ---- END TRY CATCH НАЧАТЬ - END CATCH Внутри Web API следующим образом я потребляя хранимая процедура QueriesTableAdapter Qa = новый QueriesTableAdapter (); используя (TransactionScope сфера = новый TransactionScope ()) {qa.SpSampleInMemoeryAccess (g_OutParameter64); если (g_OutParameter64> 0) {scope.Complete (); Статус = истина; } Еще {Статус = ложь; }}} НАЧАТЬ TRY ВЫБРАТЬ Itemid ИЗ SAMPLE_IN_MEMORY_TABLE ---- END TRY CATCH НАЧАТЬ - END CATCH Внутри Web API следующим образом я потребляя хранимая процедура QueriesTableAdapter Qa = новый QueriesTableAdapter (); используя (TransactionScope сфера = новый TransactionScope ()) {qa.SpSampleInMemoeryAccess (g_OutParameter64); если (g_OutParameter64> 0) {scope.Complete (); Статус = истина; } Еще {Статус = ложь; }}} НАЧАТЬ TRY ВЫБРАТЬ Itemid ИЗ SAMPLE_IN_MEMORY_TABLE ---- END TRY CATCH НАЧАТЬ - END CATCH Внутри Web API следующим образом я потребляя хранимая процедура QueriesTableAdapter Qa = новый QueriesTableAdapter (); используя (TransactionScope сфера = новый TransactionScope ()) {qa.SpSampleInMemoeryAccess (g_OutParameter64); если (g_OutParameter64> 0) {scope.Complete (); Статус = истина; } Еще {Статус = ложь; }}} } Еще {Статус = ложь; }}} } Еще {Статус = ложь; }}}
Askarc Ali
1

голосов
0

ответ
170

Просмотры

Global Exception Handler for all types of the Exceptions in WebApi2

Я работаю над Exception Handling на WebAPI и мне нужно отсылать сообщения об ошибках моих клиентов путем добавления HttpStatusCode и ErrorBody. я попробовал и я нашел некоторые полезные решения, как ExceptionFilters, HttpResponseMessage и некоторые глобальные обработчики исключений, но я не глубоко в них, потому что я нахожусь в технико-экономическом обосновании. некоторые из них, как и ExceptionFilters работает до / после получения исключения, и они были полезны для ведения журнала цели. но все они просто бросить свои бега коды в исключение во время выполнения. Я провел день, чтобы найти, как я могу собрать и избавиться от ошибок во время выполнения VisualStudio, когда я запустить новый бросок ... выражение; но я не смог достичь того, что я искал. Когда я выбираю HttpResponseMessage как типы возвращаемых моих ActionMethods, это довольно простой способ сделать ошибку и отправить его обратно на запрос клиента. но когда я хочу, чтобы выбрать другой путь, например: публичное GetAllUsers пользователя () {... // Некоторые коды {певд HttpResponseException (HttpStatusCode.Accepted); } Еще {...}} это просто подвезти меня к ошибке во время выполнения (я думаю, это просто предупреждение, потому что мне нужно только нажать клавишу F5, чтобы избавиться от этого на стороне сервера Bump :)) и в конце концов я буду видеть мой генерироваться сообщение об ошибке на стороне клиента приложения. Я не хочу использовать HttpResponseMessage в качестве выходного типа моих ActionMethods, потому что я несу ответственность развивать как Front-End и Back-End и принимает скучную проверку, чтобы увидеть «Какой тип этого ActionMethod?» Как я могу сделать эту работу? // Некоторые коды {певд HttpResponseException (HttpStatusCode.Accepted); } Еще {...}} это просто подвезти меня к ошибке во время выполнения (я думаю, это просто предупреждение, потому что мне нужно только нажать клавишу F5, чтобы избавиться от этого на стороне сервера Bump :)) и в конце концов я буду видеть мой генерироваться сообщение об ошибке на стороне клиента приложения. Я не хочу использовать HttpResponseMessage в качестве выходного типа моих ActionMethods, потому что я несу ответственность развивать как Front-End и Back-End и принимает скучную проверку, чтобы увидеть «Какой тип этого ActionMethod?» Как я могу сделать эту работу? // Некоторые коды {певд HttpResponseException (HttpStatusCode.Accepted); } Еще {...}} это просто подвезти меня к ошибке во время выполнения (я думаю, это просто предупреждение, потому что мне нужно только нажать клавишу F5, чтобы избавиться от этого на стороне сервера Bump :)) и в конце концов я буду видеть мой генерироваться сообщение об ошибке на стороне клиента приложения. Я не хочу использовать HttpResponseMessage в качестве выходного типа моих ActionMethods, потому что я несу ответственность развивать как Front-End и Back-End и принимает скучную проверку, чтобы увидеть «Какой тип этого ActionMethod?» Как я могу сделать эту работу? )) И в конце концов я буду видеть мой сформированное сообщение об ошибке на стороне клиента приложения. Я не хочу использовать HttpResponseMessage в качестве выходного типа моих ActionMethods, потому что я несу ответственность развивать как Front-End и Back-End и принимает скучную проверку, чтобы увидеть «Какой тип этого ActionMethod?» Как я могу сделать эту работу? )) И в конце концов я буду видеть мой сформированное сообщение об ошибке на стороне клиента приложения. Я не хочу использовать HttpResponseMessage в качестве выходного типа моих ActionMethods, потому что я несу ответственность развивать как Front-End и Back-End и принимает скучную проверку, чтобы увидеть «Какой тип этого ActionMethod?» Как я могу сделать эту работу?
RezaNoei
1

голосов
1

ответ
126

Просмотры

DelegatingHandlers not executing when routes not defined

Я работаю над проектом WebAPI 2, который в настоящее время использует маршрутизацию атрибутов на основе исключительно к тому, что нет маршрутов, определенных в регистрации, и все работает, как ожидалось. Тем не менее, я теперь добавить DelegatingHandler, чтобы обеспечить сердцебиение, что я могу пинг с запросом ГОЛОВЫ: класс HeartbeatMessagingHandler общественности: DelegatingHandler {защищенный переопределение Task SendAsync (HttpRequestMessage запрос, CancellationToken CancellationToken) {если (IsHeartbeat (запрос)) {если (запрос .method == HttpMethod.Head) {ответ вар = новый HttpResponseMessage (HttpStatusCode.NoContent) {Содержание = новый StringContent (string.Empty)}; вар задача = новый TaskCompletionSource (); task.SetResult (ответ); вернуться task.Task; }} Вернуть base.SendAsync (запрос, CancellationToken); } Частного статического BOOL IsHeartbeat (HttpRequestMessage запрос) {возвращение request.RequestUri.LocalPath.Equals ( "/ Heartbeat", StringComparison.OrdinalIgnoreCase); }} Однако, обработчик не вызывается, если я сделать ожидаемые ГОЛОВЫ HTTP: // локальным / сердцебиение запроса; если я называю любой маршрут, который действительно существует, то обработчик вызывается; и если добавить конфигурацию маршрутизации старой школы, то обработчик вызывается на ожидаемом / сердцебиения конечной точки. Таким образом, используя атрибут только маршрутизации, как я могу обрабатывать запрос на «виртуальную» конечную точку? Обновлять сообщение обработчики регистрируются следующим образом: config.MessageHandlers.Add (новый HeartbeatMessagingHandler ()); config.MessageHandlers.Add (новый RequestAndResponseLoggerDelegatingHandler ()); config.MessageHandlers.Add (новый ApplicationInsightsMessageHandler ()); поэтому он зарегистрирован, прежде чем, например, мой глобальный обработчик регистрации, и в соответствии с моим пониманием, обработчики сообщений получать сообщения в порядке их регистрации.
David Keaveny
1

голосов
2

ответ
86

Просмотры

How do I set OWIN keys like host.AppMode when running under IIS (Host.SystemWeb)?

В трубопроводе Owin заявления я являюсь рефакторингом, я нашел следующий фрагмент кода: частная BOOL IsDevelopment (IAppBuilder приложения) {сопзЬ строку appModeKey = «host.AppMode»; если (app.Properties.ContainsKey (appModeKey)) {вар appMode = app.Properties [appModeKey] в виде строки; если {возвращение appMode.Equals ( "развитие", StringComparison.InvariantCultureIgnoreCase) (string.IsNullOrEmpty (appMode)!); }} Вернуться ложным; } В результате этого метода затем используется для принятия решения о, например, какие компоненты включают в трубопроводе: если (IsDevelopment (приложение)) {app.Use (); } Еще {app.Use (); } Теперь, в новой тестовой среде я устанавливаю, я хотел бы - на данный момент, но не навсегда - использовать конфиг развития. Есть ли способ, что я могу добиться этого без изменения коды принятия решений? Другими словами, как я установил app.Properties [ «host.AppMode»] на «развитие» из-за пределов кода приложения? (AppSettings или аналогичные в Web.config будет работать, если бы я мог понять, как;. Можно изменить на те, развертывания времени, так как они различаются в зависимости от окружающей среды в любом случае)
Tomas Aschan
1

голосов
1

ответ
945

Просмотры

Как проверить JWT токен в aspnet.core Web API?

Я создал пользовательский класс промежуточного слоя, который проверяет маркер JWT. Я называю этот метод перед app.AddMvc () в методе конфигурирования. *** Я хотел бы знать, какие вещи, которые я должен добавить к службам конфигурации для проверки подлинности моего веб-API с помощью JWT? Я добавил [Авторизоваться] в моем классе контроллера я должен назвать мой класс промежуточного слоя, который проверяет маркер JWT первым в методе Configure ли? или я должен позвонить App.UseAuthentication () Я использую следующий порядок: app.UseAuthentication (); app.MessageHandlerMiddleware (); app.UseMvc (); Я новичок в .net реализации веб-API. Не могли бы вы мне помочь?
Girish
1

голосов
0

ответ
31

Просмотры

Multi-часть файла формы загрузки - AWS шлюз

Я создать .net Web API развертывания на AWS. API доступен через AWS API Gateway. Я знаю, что AWS шлюз не поддерживает несколько частей формы, так что я интересно, если это все-таки дело. Я добавил конечную точку на шлюзе AWS как пройти, хотя и двоичный контакт, но файл потерян.
Massimiliano Peluso
1

голосов
0

ответ
271

Просмотры

Вызов Web API в службе Windows?

Я разработал веб-Апите в .net, и я хотел бы иметь какое-то сервис, который будет загружать сообщения электронной почты с использованием учетной записи внешнего вида и поместить данные из сообщений электронной почты в моей базе данных, используя мой API (например, я хотел бы создать новый экземпляр мой класс игрок, который находится в моем Апи, а затем сохраняется его на моей базе данных). Я новичок в этом, так что я прошу прощения, если что-то не ясно, на мой вопрос, пожалуйста, не возражаете спрашивать меня подробности. Мне удалось соединить и извлекать данные из электронных писем, уже по другому решению, он работает, но теперь я хочу, чтобы создать что-то моющее средство, которое будет работать целый день, чтобы проверить, есть ли новые письма, а затем создать новые «Игрок», например, с помощью моего API Так что мой вопрос: является создание службы Windows хорошего выбора? (Я предполагаю, что создание нового проекта в API» s решение для этой функции является хорошим выбором). Я читал некоторые статьи о самообороне-хостинг WEB API на Windows Services, но я не уверен, вот что я хочу делать какие-либо советы / советы бы более чем приветствуется! TY
Max
1

голосов
2

ответ
255

Просмотры

Web API 2 Обычная проверка подлинности и позволяют действия не отмечено [Авторизоваться]

Я смотрел на обычную проверку подлинности в веб-API2 и не похоже, чтобы найти объяснение что-то я запутался о. Я создал проект веб-приложения апи с индивидуальной аутентификации в Visual Studio 2017. У меня есть код по умолчанию общественный класс ValuesController: ApiController {общественного IEnumerable Get () {вернуть новую строку [] { «value1», «value2»}; } Публичная строка Получить (Int ID) {возвращение "значение"; }} Я называю эти действия через почтальона, браузер и т.д. все хорошо. Если я добавляю [Авторизовать] атрибут к одному из методов я получаю 401 несанкционированный ответ, как и ожидалось. Все идет нормально. Я затем добавить базовую аутентификацию путем создания класса, производного от AuthorizationFilterAttribute общественного класса BasicAuthenticationAttribute: AuthorizationFilterAttribute {публичного переопределение недействительными OnAuthorization (HttpActionContext ActionContext) {вар authHeader = actionContext.Request.Headers.Authorization; если (authHeader! = NULL) {вар authenticationToken = actionContext.Request.Headers.Authorization.Parameter; вар decodedAuthenticationToken = Encoding.UTF8.GetString (Convert.FromBase64String (authenticationToken)); вар usernamePasswordArray = decodedAuthenticationToken.Split ( ':'); переменная UserName = usernamePasswordArray [0]; вар пароль = usernamePasswordArray [1]; вар IsValid = имя_пользователь == "АДЭ" && пароль == "пароль"; если (IsValid) {вар принципала = новый GenericPrincipal (новый GenericIdentity (Username), NULL); HttpContext.Current.User = основным; вернуть; }}} HandleUnathorized (ActionContext); } Частных статических пустот HandleUnathorized (HttpActionContext ActionContext) {actionContext.Response = actionContext.Request.CreateResponse (HttpStatusCode.Unauthorized); actionContext.Response.Headers.Add ( "WWW-Authenticate", "Базовая схема = местоположение 'Data' =«HTTP: // локальный:"); } Зарегистрировать фильтр в WebApiConfig.cs config.Filters.Add (новый BasicAuthenticationAttribute ()); Я использую почтальон для вызова действия, отмеченное [Авторизоваться] и отправить с заголовком Authorization: Basic YWRlOnBhc3N3b3Jk Запрос авторизацией и я получаю мой ответ действия. Все хорошо. Теперь я называю действия, не отмеченные [Авторизоваться] без заголовка Authorization от почтальона, ожидая, чтобы получить ответ, но OnAuthorization называется и, очевидно, возвращает HandleUnathorized (ActionContext); Я только ожидал, что метод OnAuthorization будет называться, где действие помечено [Авторизоваться] Так что теперь я имею в виду, что точка атрибута [Авторизоваться], потому что OnAuthorization называется независимо так, что точка разметки действий [Авторизовать] атрибут ? Во-вторых, я добавил следующий метод для моего класса частной статической BOOL SkipAuthorization (HttpActionContext ActionContext) {Contract.Assert (ActionContext! = NULL); вернуться actionContext.ActionDescriptor.GetCustomAttributes (). Любой () || . ActionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes () Любое (); } Я называю этот метод в начале OnAuthorization, если (SkipAuthorization (ActionContext)) возврата; Если я отмечаю свои действия с [AllowAnonymous] он работает. Если нет [Авторизоваться] атрибут на контроллере или конкретных действий, то, конечно, OnAuthorization также должны быть пропущены? Я просто не вижу смысла использования [Авторизовать], я явно не хватает что-то здесь, я делаю что-то не так, или мне нужно отметить действия с [AllowAnonymous], чтобы исключить их.
Adie Bryer
1

голосов
0

ответ
51

Просмотры

Asp.Net Web API: Перенаправление с пути API на странице Google Authentication

Я использовал следующую статью для осуществления аутентификации Google в моем asp.net Web API проекта. Я последовал за статью и создал пример приложения. Теперь у меня есть простой тест, как последовать, но я не могу дальше продолжить я ударил URL / API / Логин / ExternalLogin в браузере перенаправляет меня к Google страницу аутентификации, где я логин для Google перенаправляет меня обратно к API / дома (опять же API URL), где я сравниваю Google вернулся идентичность в моей локальной базе данных. Но моя путаница начинается здесь, как я могу использовать эту API URL-адрес в моем приложении angularJs? Если я ударил апи / Войти / ExternalLogin в угловом службе, он возвращает мне ответ страницу аутентификации Google? Как можно перенаправить браузер, если аутентификация от Google нужна? Какой поток я могу следовать? Пожалуйста, помогите мне, я новичок в этой концепции.
Lali
0

голосов
0

ответ
4

Просмотры

AuthorizationCodeProvider: не НАПИСАТЬ не вызывается, как сгенерировать код авторизации?

Я настраиваю свой собственный сервер OAuth2. До сих пор, я успешно реализован GrantResourceOwnerCredentials в моей реализации OAuthAuthorizationServerProvider. Теперь, потому что я разрабатываю приложение для нашего бизнеса, я хочу реализовать грант OAuth2 кода авторизации. Я пытался следовать указаниям здесь https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server, но в моей реализации, у меня нет нашел, как достичь Создать призыв AuthorizationCodeProvider (который я поставил в OAuthAuthorizationServerOptions). Я кратко проверил ли доступ к TokenEndpointPath с (неправильным) параметрами коды работает, а в отладчике я вижу, что получишь вызов моего AuthorizationCodeProvider является хитом. Конечно, нет никакого успеха, потому что код я посылаю это «sometestcode» вместо реальной, но код ударил так, что означает, что я нахожусь на правильном пути. Вот то, что я до сих пор: общественный переопределение Task ValidateClientRedirectUri (контекст OAuthValidateClientRedirectUriContext) {если (! OAuthRepository.GetClient (context.ClientId) = NULL) {вар expectedRootUri = новый Uri (context.Request.Uri, "/"); если (context.RedirectUri.StartsWith (expectedRootUri.AbsoluteUri)) {context.Validated (); вернуть Task.FromResult (NULL); }} Context.Rejected (); вернуть Task.FromResult (NULL); } Общественного переопределение задачи AuthorizeEndpoint (контекст OAuthAuthorizeEndpointContext) {// Я знаю, что это неправильно, но это только начало, а не в центре внимания этого SO вопроса. context.Response. Перенаправление (context.AuthorizeRequest.RedirectUri); context.RequestCompleted (); вернуть Task.FromResult (NULL); } Общественного переопределение задачи GrantAuthorizationCode (контекст OAuthGrantAuthorizationCodeContext) {// Нуждается дополнительные проверки, а не фокус моего вопроса либо вар newTicket = новый AuthenticationTicket (context.Ticket.Identity, context.Ticket.Properties); context.Validated (newTicket); вернуть Task.FromResult (NULL); } Теперь, когда я называю AuthorizeEndpointPath с redirect_uri, я послан к этому Uri немедленно. Я знаю, что это не так: я должен быть отправлен на отдельную страницу входа в систему. Я починю свой Web API позже перенаправить к правильному Ури. В центре внимания мой вопрос заключается в следующем: я сейчас в процессе реализации страницы входа в систему, но я не знаю, как получить код авторизации от моего WebAPI после того, как пользователь вошел в систему. (я пропущу часть согласия на данный момент и предположить, что если пользователь вошел в систему, они хорошо с ним, я буду добавить давая согласие позже.) Я основывая мой поток на диаграмме общей здесь https://docs.apigee.com/api-platform/security/oauth/oauth-v2-policy-authorization-code-grant-type Я использую Thinktecture IdentityModel создать страницу входа в контроллер MVC. Теперь мне нужно получить код авторизации от Web API в моей MVC контроллер. И после этого я могу перенаправить пользователя на оригинальный клиент (приложение), который запрашивал поток кода авторизации. Для того, чтобы получить код авторизации от моего Web API, я вижу три метода OAuth2Client Thinktecture в: CreateAuthorizeUrl CreateCodeFlowUrl RequestAuthorizationCodeAsync Ни кажется, делать то, что я хочу. Как я продолжу так, что мой WebAPI называется генерировать код? [HttpGet] [ImportModelStateFromTempData] общественности ActionResult Авторизоваться (строка ClientId, строка ReturnUrl, строка responseType) {если (responseType? .ToLower () ?. уравновешивание ()! = "Код") {// Перенаправление с ошибкой в ​​обратном URL вернуться Перенаправление (ReturnUrl / * TODO: ошибка * /); } // Спрашивает у пользователя согласия, чтобы иметь собственный клиент или доступ приложения для WebAPI от их имени. // Примечание: Это должно быть известным клиентом, и мы должны показать имя родного клиента к пользователю. вернуться View (); } [HttpPost] [ExportModelStateToTempData] общественных асинхронной Task авторизовать (AuthorizeViewModel ViewModel) {OAuth2Client. ?????? // Как получить код авторизации? вернуться редирект (....); // Отправляем обратно в оригинальный клиент с кодом в качестве параметра строки запроса} Я думаю, что я его правильно настроить на стороне Web API. Я просто не знаю, как попасть Создать часть потока. Я надеюсь, что кто-то может помочь мне понять, что я не вижу. Я использую почтальон, чтобы проверить мой Web API, я ищу, чтобы построить Uri к моему Web API, что я могу отправить на почтальон и возвращает мне код авторизации. Тогда, я ищу эквивалент Thinktecture IdentityModel делать это в моем проекте ASP.Net. // Отправляем обратно в оригинальный клиент с кодом в качестве параметра строки запроса} Я думаю, что я его правильно настроить на стороне Web API. Я просто не знаю, как попасть Создать часть потока. Я надеюсь, что кто-то может помочь мне понять, что я не вижу. Я использую почтальон, чтобы проверить мой Web API, я ищу, чтобы построить Uri к моему Web API, что я могу отправить на почтальон и возвращает мне код авторизации. Тогда, я ищу эквивалент Thinktecture IdentityModel делать это в моем проекте ASP.Net. // Отправляем обратно в оригинальный клиент с кодом в качестве параметра строки запроса} Я думаю, что я его правильно настроить на стороне Web API. Я просто не знаю, как попасть Создать часть потока. Я надеюсь, что кто-то может помочь мне понять, что я не вижу. Я использую почтальон, чтобы проверить мой Web API, я ищу, чтобы построить Uri к моему Web API, что я могу отправить на почтальон и возвращает мне код авторизации. Тогда, я ищу эквивалент Thinktecture IdentityModel делать это в моем проекте ASP.Net. Я ищу построить Uri к моему Web API, что я могу POST для почтальона и возвращает мне код авторизации. Тогда, я ищу эквивалент Thinktecture IdentityModel делать это в моем проекте ASP.Net. Я ищу построить Uri к моему Web API, что я могу POST для почтальона и возвращает мне код авторизации. Тогда, я ищу эквивалент Thinktecture IdentityModel делать это в моем проекте ASP.Net.
Diana Koenraadt
1

голосов
1

ответ
89

Просмотры

Привязка вложенного объекта из угловатых WebAPI

Я пытаюсь отправить данные из углового приложения «Добавить» метод WebAPI в формате XML. Я могу связать нормальные свойства, но вложенная тип объекта телефон не получает переплетены. Пожалуйста, помогите мне, чтобы связать объект с телефона WebAPI модели. Ниже мой код: - PatientModel.ts экспорта класс пациент {PatientId: строка; FirstName: строка; Телефон: TelephoneNumber; } Экспорт класса TelephoneNumber {CellPhone: число; } Add-Patient.component.ts ngOnInit () {this.addForm = this.formBuilder.group ({PatientId: [ '', Validators.required], ПгвЬЫате: [ '', Validators.required] Телефон: this.formBuilder .group ({CellPhone: [ '', Validators.pattern ( "[0-9] \\ д {9}")]})}); }; this.patientService.addPatient (this.addForm.value) .subscribe (данные => {this.router.navigate ([» пациент']); }); Patient.service.ts addPatient (пациент: Пациент) {константные postedData = `$ {patient.PatientId} $ {patient.FirstName} $ {patient.Phone.CellPhone}` пусть httpHeaders = новые HttpHeaders (); httpHeaders = httpHeaders.append ( 'Content-Type', 'Текст / XML'); httpHeaders = httpHeaders.append ( 'Accept', 'текст / XML'); вернуть this.http.post (this.baseUrl + "/ добавить", postedData, {заголовки: httpHeaders}); } Add.patient.component.html Сотовый телефон: Сохранить WebAPI метод контроллера [HttpPost] общественного IHttpActionResult Добавить (р пациента) {INT ответ = this._patientService.AddPatient (р); если (ответ == -1) возвращение конфликтов (); еще вернуться Ok (»
Saurabh
1

голосов
0

ответ
20

Просмотры

Web API parameter not deserializing (is null) when XML element is missing

I have a model defined for my web API: public class MyRequest { public int id { get; set; } public string name { get; set; } public short? location { get; set; } } The function takes the model as the parameter: public MyResponse Post(MyRequest request) { ... doSomeStuff(); ... } I want both the name and location properties of the model to be optional. If they aren't passed in, the function should see them as null and evaluate them as such. This is working fine when data is passed in as JSON: { "id":100, "location":1 } The request is deserialized and the object has an ID of 100, null for the name, and a location of 1. However, this does not work for XML: 100 1 The request object is null - I assume because the object fails to deserialize. If I add the missing element to the XML request, it works correctly. So I know the function and the formatting of the XML/call is correct. It's only a problem when an element is missing. I've tried adding the [XmlElement(IsNullable = true)] to the properties I wish to make optional, but that makes no difference. Note: I am using XmlSerializer, rather than the default DataContractSerializer. Any help would be greatly appreciated.
Nick D
1

голосов
1

ответ
128

Просмотры

GZip For ASP.NET WebAPI

Я использую плагин для GZIP Сжатие ASP.NET WebAPI ответов. Проблема: Получение сообщение об ошибке, как показано ниже: тип или пространство имен имя «GZipCompressor» не может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?) Я добавил пакеты и использовать его под файл «Global.asax.cs» по методу: ** Application_Start () То, что я пытался: Добавлено ниже Namespaces в файле «Global.asax.cs»: с помощью Microsoft.AspNet.WebApi.Extensions.Compression.Server; используя System.Net.Http.Extensions.Compression.Client; Примечание: Пространство имен с использованием System.Net.Http.Extensions.Compression.Client; не получает решена. А это значит, если я типа System.Net.Http в Visual Studio, я мог бы получить пространство имен Http в Global.asax.cs Мой Application_Start Метод: защищенный аннулируются Application_Start (объект отправителя, EventArgs е) {// Код, который запускается при запуске приложения BundleConfig.RegisterBundles (BundleTable.Bundles); GlobalConfiguration.Configure (WebApiConfig.Register); GlobalConfiguration.Configuration.MessageHandlers.Insert (0, новый ServerCompressionHandler (новый GZipCompressor (), новый DeflateCompressor ())); } .NET Framework версии 4.6.1 Есть ли другой способ сжать WebAPI результат с GZIP без использования плагинов?
Vikash
1

голосов
0

ответ
37

Просмотры

Принимая много времени, чтобы позвонить апи

Я использую VSTO решение и отправить данные почтового отправления в API. Я попытался отправить данные объекта изображения в двоичном виде и отправки в Web API. Если бы я попытался отправить объект с данными 25MB это занимает от 10 до 15 сек, чтобы ударить вызов API.
Naveen Donepudi
1

голосов
0

ответ
63

Просмотры

Связь между докеров контейнеров, используя DOCKER-создавать, .net основные результаты АФИ в SocketException: Соединение отклонено

Я пытаюсь подключиться к API в Докер контейнере, из другого контейнера. Я могу успешно вызвать API от хоста, используя этот URL HTTP: // локальный: 8091 / API / цитата / 1234. При попытке обмена данными между контейнерами, которые я использую этот URL, HTTP: // jobenginequoteservice: 80 / апи / цитата / 1234. Но это приводит к ошибке, SocketException: Соединение отклонено. Это конфигурационный порт в моем Докер-Compose файл jobenginequoteservice: изображение: *** порты: - "8091: 80" сборки: контекст:. dockerfile: Услуги / Quote / JobEngineQuoteService / Dockerfile я отладки это в визуальной студии, апи написана на .NET Core. Я проверил сеть Докера и оба контейнера является частью одного по умолчанию, созданный композе. Может кто-нибудь помочь? Благодарю.
Dave
1

голосов
1

ответ
690

Просмотры

Модернизированный WebAPI2 и DotNetNuke 7.2.1 и все услуги возвращения 404,0

Я написал несколько контроллеров WebAPI с помощью WebAPI для DotNetNuke 7.0 с помощью этого метода все работало замечательно. Сегодня я модернизировал DNN до 7.2.1 и модернизировал свои проекты на ASP.NET Web API2 и мои услуги на моей локальной машине сейчас не работает - они возвращаются «Ошибка HTTP 404.0 - Not Found». Я думаю, что это что-то делать с IIS и extensionless URL-адресов - Я проверил IIS и DesktopModules не является приложением, как предложено здесь. Я попытался Скрипач и F12 Отладчики и сообщение не дает никаких намеков прочь. Как я могу отладить эту работу, где проблема лежит?
Rodney
1

голосов
2

ответ
1.3k

Просмотры

Как пройти ControllerContext приписывать

Я хотел бы использовать информацию из ControllerContext или ActionContext из конструктора Атрибут \ Filter. Как я могу это сделать? Пытался передать ControllerContext в качестве параметра атрибута от действия, но без успеха.
Omtechguy
1

голосов
1

ответ
1.2k

Просмотры

Web API 2 размещенных в IIS 7.5 и Windows Server 2008 R2 дает 403.14

Есть много других вопросов, подобных этому в SO, я до сих пор размещение здесь, потому что ни один из них не работает для моего окружения. Точная ошибка я получаю, HTTP Error 403.14 - Forbidden веб-сервер настроен не перечислить содержимое этого каталога. Включение просмотра каталога в IIS не помогает вообще. Также пытался добавить добавляя все глаголы в ExtensionLessUrlHandler-интегрально-4,0 в отображениях IIS Handler. А также попытался удалить модуль WebDAVModule и обработчик WebDAV в конфигурации, как показано ниже. Заранее спасибо за ответы!
Manu

Просмотр дополнительных вопросов