Asp.net mvc Post/Get适用于VS Development server,但不适用于IIS7

Asp.net mvc Post/Get适用于VS Development server,但不适用于IIS7,asp.net-mvc,json,iis,iis-7,Asp.net Mvc,Json,Iis,Iis 7,我使用Asp.NETMVC4VS2010SP1和Windows7创建了一个网页。它也有一个api,通过它我可以进行搜索或上传一些数据和文件。当我在VS2010 SP1的开发服务器上部署该页面时,一切正常,但当我选择IIS IIS7时,api不再工作。IsSuccessStatusCode似乎为false。但是页面本身可以工作,并且可以从其他机器访问 这是我用于内置开发服务器的地址:http://localhost:56272/api/ 这是我在IIS中使用的:http://127.0.0.1/a

我使用Asp.NETMVC4VS2010SP1和Windows7创建了一个网页。它也有一个api,通过它我可以进行搜索或上传一些数据和文件。当我在VS2010 SP1的开发服务器上部署该页面时,一切正常,但当我选择IIS IIS7时,api不再工作。IsSuccessStatusCode似乎为false。但是页面本身可以工作,并且可以从其他机器访问

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

我已经为VS2010完成的IIS创建了一个虚拟目录。我是否需要另外配置一些内容,或者这可能是仅针对IIS存在的路由问题

这是我的客户端—类MyService—用于获取:

 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;
    }

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


有关调整权限的具体说明,请参见此处:

IIS的地址错误。而不是http://127.0.0.1/api/ 一定是这样http://127.0.0.1/MyVirtualFolderSomething/api/.

但是使用GET在数据库中执行搜索应该是可行的,对吗?还有client.GetAsynch。。。不适用于IIS,但适用于内置服务器。是http://127.0.0.1/api/ AJAX调用用于执行GET的地址?是的,我在使用IIS时尝试过这个方法。还有一个内置服务器的端口可以工作。@Katharina:AJAX调用不应该违背127.0.0.1。呼叫应与正在使用的网站相关。当您在该计算机上时,您可能会使用本地主机地址访问它,但任何远程调用都肯定会失败,因为127.0.0.1将始终解析到客户端计算机而不是服务器。相对于该网站,您的意思是什么?这样的地址会是什么样子?我看到的另一种选择是使用我的实际IP地址,因为服务器就是我的机器。但我想这不是你的意思。你能不能提供实际的Http响应状态代码、消息等,而不是调用失败?我现在设法从调用中获取结果消息,它说了一些类似“找不到”的内容。IIS的地址错误。我忘了添加虚拟文件夹的名称。所以你的问题是一个很好的暗示!谢谢
public class SearchController : ApiController
    {
        [HttpGet]
        public IEnumerable<Shared.Item> ByTag(string search)
        {....}
    }
config.Routes.MapHttpRoute(
            name: "SearchApi",
            routeTemplate: "api/Search/{action}/{search}",
            defaults: new
                          {
                              controller="Search"                                  
                          }
        );