1

我使用 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"                                  
                          }
        );
4

2 回答 2

0

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

可以在此处找到调整权限的具体说明:http: //support.microsoft.com/kb/979124

于 2012-10-15T11:16:07.213 回答
0

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

于 2012-10-19T11:19:03.373 回答