发布/获取适用于VS Development服务器但不适用于IIS7

时间:2012-10-15 11:12:45

标签: asp.net-mvc json iis iis-7

我使用Asp.Net MVC 4(VS2010 SP1,Windows 7)创建了一个网页。它还有一个API,通过我可以搜索或上传的东西(数据和文件)。当我在VS2010 SP1的开发服务器上部署页面时,一切正常,但是当我选择IIS(IIS7)时,api不再起作用了。 “IsSuccessStatusCode”似乎是假的。但页面本身可以工作,可以从其他机器中获取。

这是我用于内置开发服务器的地址:“http:// localhost:56272 / api /” 这用于IIS:“http://127.0.0.1/api/”

我为IIS创建了一个虚拟目录(由VS2010完成)。我是否需要另外配置一些内容,或者它是否只是IIS存在的路由问题?

这是我的客户端 - 类MyService - 用于GET:

 public MyService(string serviceAdress) //"http://127.0.0.1/api/"
        {
            this.serviceAdress = new Uri(serviceAdress); //of type Uri
            client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
        }
    public Task<IEnumerable<Item>> SearchByTag(string tag)
    {
        client.BaseAddress = serviceAdress;
        var getStuffCall=client.GetAsync("Search/ByTag/" + tag);
        var r=getStuffCall.ContinueWith(
            t =>t.Result.IsSuccessStatusCode? (t.Result.Content.ReadAsAsync<IEnumerable<Item>>().Result):new List<Item>()
            );
        return r;
    }

我的服务器端看起来像这样:

public class SearchController : ApiController
    {
        [HttpGet]
        public IEnumerable<Shared.Item> ByTag(string search)
        {....}
    }

这是WebApiConfig中的路由:

config.Routes.MapHttpRoute(
            name: "SearchApi",
            routeTemplate: "api/Search/{action}/{search}",
            defaults: new
                          {
                              controller="Search"                                  
                          }
        );

2 个答案:

答案 0 :(得分:0)

您需要确保该网站和应用程序池的用户对您上传的目录具有写入权限。在开发服务器中,它不起作用,因为它在具有正常权限的本地(或域)帐户下运行。 IIS7在受限制的用户帐户下运行,因此必须调整其权限,或者您要上载的文件夹需要包含具有写权限的此用户。

有关调整权限的具体说明,请访问:http://support.microsoft.com/kb/979124

答案 1 :(得分:0)

IIS的地址错误。而不是“http://127.0.0.1/api/”,它必须是“http://127.0.0.1/MyVirtualFolderSomething/api/”。