【问题标题】:WebAPI : 403 Forbidden after publish websiteWebAPI:发布网站后403禁止
【发布时间】:2015-05-26 09:21:55
【问题描述】:

好的,我很难找到问题,因为它在本地工作,但在发布后结果很简单:

错误代码:403 禁止。服务器拒绝了指定的统一资源定位符 (URL)。请联系服务器管理员。 (12202)

代码:

[RoutePrefix("api/v1/project")]
public class ProjectController : BaseApiController
{
    [HttpGet]
    public HttpResponseMessage GetProjects()
    {
        HttpResponseMessage resp = new HttpResponseMessage(HttpStatusCode.OK);
        if(User.Identity.IsAuthenticated)
        {
            var model = new ModelFactory().CreateProjects();
            resp = Request.CreateResponse(HttpStatusCode.OK, model);
        }
        return resp;
    }
}

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // all actions under /project routes require authentication
        config.Routes.MapHttpRoute(
            name: "ProjectApi",
            routeTemplate: "api/v1/{controller}/{action}/{apikey}",
            defaults: new { apikey = RouteParameter.Optional },
            constraints: new { controller = "project" },
            handler: new BasicAuthHandler(config));

        // all routes requires an api key
        config.MessageHandlers.Add(new ApiKeyHandler());
        config.MapHttpAttributeRoutes();
    }
}

我从网上尝试了几种“解决方案”,但似乎都没有解决这个问题。我添加了:

// Stop IIS/Asp.Net breaking our routes
RouteTable.Routes.RouteExistingFiles = true;

来自:http://www.grumpydev.com/2013/09/17/403-14-error-when-trying-to-access-a-webapi-route/

并确保:

<modules runAllManagedModulesForAllRequests="true">

有了上面的代码,使用下面的链接给出一个成功的连接,它检查(以正确的顺序)APIkey(ApiKeyHandler),检查用户是否需要登录(BasicAuthHandler),然后进入控制器中的方法({controller}/{action})。

// THIS WORKS!
http://localhost:51077/api/v1/project/getprojects?apikey=123456

然后我们发布并尝试同样的事情

// This is haunted with number 403
http://website.com/api/v1/project/getprojects?apikey=123456

给出错误代码:403 Forbidden。

我一无所知。我什至尝试将“网络服务”的整个发布文件夹的安全设置更改为完全访问权限.. 没有改变。

如果您需要更多情报,请告诉我。

【问题讨论】:

  • 如何发布网站?应用程序池用户是否具有发布文件夹中的权限?您的应用程序中实现了哪种授权?您是否使用 SSL?您可以访问站点根目录上的字段吗?
  • 我在 BUILD 下使用 MVS (2012 Professional) 'Publish Web site'。是的,它确实。简单的一个,弹出一个“用户名,密码”字段并将其发送回+保存为cookie。不,没有SSL。是的,我可以访问所有这些。
  • 我刚刚远程连接到 webbserver 机器并尝试了闹鬼的 403 地址,它可以在该机器上运行,所以我认为有什么东西阻止了外部呼叫。

标签: asp.net-web-api routing publish http-status-code-403


【解决方案1】:

打电话给 web 服务器机器,他们有一个防火墙阻止传入的 webapi 调用并进行身份验证。它现在可以正常工作了:)

【讨论】:

  • 只是添加到这个。我遇到了同样的问题,最终得到了可能相同的解决方案;但是,我的 IT 人员必须更改的具体内容是 Forefront TMG 中的委托属性。 stackoverflow.com/questions/54679601/…
猜你喜欢
  • 2016-03-08
  • 2012-06-18
  • 2012-01-28
  • 1970-01-01
  • 2021-04-29
  • 2012-10-13
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多