WebAPI:403在发布网站

时间:2015-05-26 09:21:56

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

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

错误代码: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)然后转到控制器中的方法({控制器} / {动作})。

// 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。

我很无能为力。我甚至尝试更改&#34; NETWORK SERVICE&#34;的整个发布文件夹的安全设置。完全访问..没有变化。

如果您需要更多英特尔,请告诉我。

1 个答案:

答案 0 :(得分:3)

称为Web服务器计算机,他们有防火墙阻止传入的webapi呼叫进行身份验证。它现在可以正常工作:)