Я делаю веб-API 2.
Отладка на моей локальной машине работает нормально. VS 2013 + IIS 8.0
Сервер работает под управлением Windows 2012 R2 + IIS 8.5 + Plesk v12
Все мои маршруты работают нормально, когда я отлаживаю их на своем локальном компьютере.
Я использую Postman и Fiddler, чтобы проверить все в API.
У меня есть один, за исключением случаев, когда я развертываю его на сервере и отправляю запрос PUT для маршрутизации http://example.net/service/Member/Profile/9
Я получаю следующую ошибку:
Ошибка HTTP 401.0 — Несанкционировано У вас нет разрешения на просмотр этого каталога или страницы.
Наиболее вероятные причины: у аутентифицированного пользователя нет доступа к ресурсу, необходимому для обработки запроса.
Модуль: WebDAVModule
Уведомление: ExecuteRequestHandler
Обработчик: WebDAVStaticMapping
Код ошибки: 0x80070005
Запрашиваемый URL-адрес: http://example.org/service/Member/Profile/5.
Физический путь: C:\Inetpub\vhosts\example.org\httpdocs\service\Member\Profile\5
Способ входа: Анонимный
Пользователь входа в систему: анонимный
Я проверил конфигурацию в IIS, и я думаю, что все в порядке. Анонимная аутентификация активна, а другие методы аутентификации деактивированы. Выбирается ApplicationPoolIdentity.
Код веб-API 2
Маршрут проложен так:
config.Routes.MapHttpRoute(
name: "EditMember",
routeTemplate: "service/Member/Profile/{id}",
defaults: new { controller = "Members", action = "Update", id = RouteParameter.Optional },
constraints: null
);
Он запустит этот код в контроллере:
// PUT: service/Member/5
[ActionName("Update")]
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutMembers(int id, MemberUpdate member)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IEnumerable<Members> memberSearchExist = from search in db.MembersSet
where search.Id == id
select search;
if (!memberSearchExist.Any())
{
return Conflict();
}
try
{
Members memberChanged = memberSearchExist.FirstOrDefault();
memberChanged.Firstname = member.Firstname;
memberChanged.Lastname = member.Lastname;
memberChanged.DateOfBirth = member.DateOfBirth;
memberChanged.Email = member.Email;
db.Entry(memberChanged).State = System.Data.Entity.EntityState.Modified;
await db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!MembersExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
Я использую CORS, и он отлично работает для всех остальных вещей.
var corsAttr = new EnableCorsAttribute("http://app.example.org, http://localhost:14844", "*", "*");
config.EnableCors(corsAttr);
Может ли кто-нибудь помочь мне, пожалуйста?
Заранее спасибо!