SharePoint 2007虚拟目录中的MVC4(Web API)控制器错误:拒绝访问

时间:2012-08-22 20:33:53

标签: asp.net-mvc iis-6

我在SharePoint网站的虚拟目录中有一个ASP.NET 4应用程序。这是一个自己的应用程序池中的自包含应用程序,所以我不认为SP是问题但是? aspx页面工作正常,但是对ApiController的请求返回401错误:Access是Deniend。

<html><head><title>Error</title></head><body>Error: Access is Denied.</body></html>

事件查看器什么都没有,IIS日志显示401 2 2148074254然后401 1 0然后200 0 0然后401 1 2148074248.我知道最后401.1看起来像我的错误,但我已经多次确认它是最后一个日志条目一个要求。适用于IE8,Chrome,FireFox。

Fiddler只显示401,“WWW-Authenticate:NTLM”与“WWW-Authenticate:NTLM TlRMblah_blah_blah ...”以及上面的HTML交替显示。

备份计划是放弃控制器并使用.ashx,但希望SO可以提供帮助。

1 个答案:

答案 0 :(得分:0)

找到解决方法,直到项目不再在SharePoint中。保持Controler类(PSSController)原样,但添加了一个带有以下代码的ashx文件,并更改了javascript以使用它。 cntrl只是我的班级;你的QueryString和Post params会有所不同。有点hacky但它​​的工作原理:))

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using Newtonsoft.Json;

namespace PipWebApp
{
    public partial class PSSurvey2API : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            String InputString = null;
            using (var sr = new System.IO.StreamReader(context.Request.InputStream))
                InputString = sr.ReadToEnd();
            List<PSSurvey.cntrl> cntrls = (List<PSSurvey.cntrl>)JsonConvert.DeserializeObject(InputString, typeof(List<PSSurvey.cntrl>));
            String Params = context.Request.QueryString["Params"];


        Controllers.PSSController APICon = new Controllers.PSSController();

        if (context.Request.QueryString["Rpt"] == null)
            context.Response.Write(JsonConvert.SerializeObject(APICon.Post(cntrls, Params)));
        else
            context.Response.Write(JsonConvert.SerializeObject(APICon.Post(cntrls, context.Request.QueryString["Rpt"], Params)));
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

}