Web API 2 Error 401.0 with IIS8.5 on a MapHttpRoute
Web API 2 Error 401.0 with IIS8.5 on one MapHttpRoute
我正在做一个网站API 2.
在我的本地机器上调试工作正常。 VS 2013 + IIS 8.0
服务器是 运行ning Windows 2012 R2 + IIS 8.5 + Plesk v12
当我在本地计算机上调试时,我的所有路由都工作正常。
我正在使用 Postman 和 Fiddler 检查 API 上的所有内容。
我有一个,除了当我将它部署到服务器并发送一个 PUT 请求到路由 http://example.net/service/Member/Profile/9
我收到以下错误:
HTTP Error 401.0 - Unauthorized You do not have permission to view
this directory or page.
Most likely causes: The authenticated user does not have access to a
resource needed to process the request.
Module: WebDAVModule
Notification: ExecuteRequestHandler
Handler: WebDAVStaticMapping
Error Code: 0x80070005
Requested URL: http://example.org/service/Member/Profile/5
Physical Path:C:\Inetpub\vhosts\example.org\httpdocs\service\Member\Profile
Logon Method: Anonymous
Logon User: Anonymous
我检查了 IIS 上的配置,我认为它看起来不错。
匿名身份验证处于活动状态,其他身份验证方法已停用。已选择 ApplicationPoolIdentity。
Web 背后的代码 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);
有人可以帮我吗?
提前致谢!
第一个问题是WebDav 模块。该模块正在阻止 PUT 和 DELETE 方法。您可以通过卸载它来解决此问题。您可以在此处找到如何执行此操作:https://betimdrenica.wordpress.com/2013/02/05/web-api-on-iis-8-0-405-method-not-allowed-for-put/
第二个问题是 HTTP 错误 404.0 - 未找到,MapRequestHandler
我找到了这个解决方案: on SO And I followed this step to install Server Side Includes http://www.iis.net/configreference/system.webserver/serversideinclude
最后一个问题是我只能
var corsAttr = new EnableCorsAttribute("http://app.example.org", "*", "*");
config.EnableCors(corsAttr);
现在一切正常。
我正在做一个网站API 2.
在我的本地机器上调试工作正常。 VS 2013 + IIS 8.0
服务器是 运行ning Windows 2012 R2 + IIS 8.5 + Plesk v12
当我在本地计算机上调试时,我的所有路由都工作正常。
我正在使用 Postman 和 Fiddler 检查 API 上的所有内容。
我有一个,除了当我将它部署到服务器并发送一个 PUT 请求到路由 http://example.net/service/Member/Profile/9
我收到以下错误:
HTTP Error 401.0 - Unauthorized You do not have permission to view this directory or page.
Most likely causes: The authenticated user does not have access to a resource needed to process the request.
Module: WebDAVModule
Notification: ExecuteRequestHandler
Handler: WebDAVStaticMapping
Error Code: 0x80070005
Requested URL: http://example.org/service/Member/Profile/5
Physical Path:C:\Inetpub\vhosts\example.org\httpdocs\service\Member\Profile
Logon Method: Anonymous
Logon User: Anonymous
我检查了 IIS 上的配置,我认为它看起来不错。 匿名身份验证处于活动状态,其他身份验证方法已停用。已选择 ApplicationPoolIdentity。
Web 背后的代码 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);
有人可以帮我吗?
提前致谢!
第一个问题是WebDav 模块。该模块正在阻止 PUT 和 DELETE 方法。您可以通过卸载它来解决此问题。您可以在此处找到如何执行此操作:https://betimdrenica.wordpress.com/2013/02/05/web-api-on-iis-8-0-405-method-not-allowed-for-put/
第二个问题是 HTTP 错误 404.0 - 未找到,MapRequestHandler 我找到了这个解决方案: on SO And I followed this step to install Server Side Includes http://www.iis.net/configreference/system.webserver/serversideinclude
最后一个问题是我只能
var corsAttr = new EnableCorsAttribute("http://app.example.org", "*", "*");
config.EnableCors(corsAttr);
现在一切正常。