Asp.Net MVC 4 (VS2010 SP1、Windows 7) を使用して Web ページを作成しました。また、検索を行ったり、何か (データやファイル) をアップロードしたりできる 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"
}
);