从web api获得404响应

时间:2013-12-21 01:41:50

标签: c# http windows-phone-7 async-await dotnet-httpclient

  1. 我有webapi和方法:

    public class ArticlesController : ApiController
    {
         //
         // GET: api/values
         public IEnumerable<Article> Get()
         {
             using (CollectionsEntities entities = new CollectionsEntities())
             {
                  return entities.Articles.ToList<Article>();
             }
         }
     }
    
  2. 工作正常,并在浏览器中查看:

    webapi works

    1. 我创建了一个客户端:

      public static class CollectionClient
      {
          private static readonly HttpClient client;
      
          public static Uri ServerBaseUri
          {
              get { return new Uri("http://localhost:10779/api/"); }
          }
      
          public static Boolean IsDirty { get; private set; }
      
          static CollectionClient()
          {
              IsDirty = true;
              client = new HttpClient(new DemoHttpMessageHandler());
          }
      
          // get all articles
          public static async Task<List<Article>> GetAllArticlesAsync()
          {
              client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
              Uri serverUril = new Uri(ServerBaseUri, "Articles");            
              var response = await client.GetAsync(serverUril);
      
              response.EnsureSuccessStatusCode();
      
              var articles = await response.Content.ReadAsAsync<List<Article>>();
              IsDirty = false;
              return articles;   
          }
      }
      
    2. 响应获得404状态代码: enter image description here

      检查

      ID_CAP_NETWORKING以确保它可以访问互联网。 有人可以帮我一把吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

我只有Android的经验,但模拟器的“localhost”可能与您的PC的“localhost”不同。请尝试使用内部子网IP。

答案 1 :(得分:0)

在windows phone 7.x中,模拟器共享主机PC的网络,这意味着:  我们可以在我们的PC上托管服务,并使用htt://localhost..

从我们的代码访问它们

在Windows Phone 8中,模拟器是在Hyper V下运行的虚拟机,这意味着: 您无法使用htt://localhost..

访问PC上的服务

您必须在URI中使用主机PC的正确主机名或原始IP地址