VS 2013では、単純なMVC/Web APIアプリケーションを作成しました。これは、写真のモデルがあります。RESTful APIコントローラ/ルートの問題
public class Photo
{
public int Id{ get; set; }
public string Name{ get; set; }
public DateTime DateTimeOriginal { get; set; }
}
とPhotoController:
Photo[] photos = new Photo[]
{
new Photo { Id= 1, Name= "Mary B.", DateTimeOriginal = Convert.ToDateTime("May 18, 2015 2:01:22 PM")},
new Photo { Id = 2, Name= "Martin M.", DateTimeOriginal = Convert.ToDateTime("May 18, 2015 2:13:09 PM")},
new Photo { Id = 3, Name= "Sparky", DateTimeOriginal = Convert.ToDateTime("May 18, 2015 2:31:22 PM")}
};
public IEnumerable<Photo> GetAllPhotos()
{
return photos;
}
public IHttpActionResult GetPhoto(int id)
{
var photo = photos.FirstOrDefault((p) => p.Id == id);
if (photo == null)
{
return NotFound();
}
return Ok(photo);
}
public IHttpActionResult GetPhoto(string Name)
{
var photo = photos.FirstOrDefault((p) => p.Name== Name);
if (photo == null)
{
return NotFound();
}
}
//I added this to see if this helps with the routing. It didn't
public IHttpActionResult GetName(string Name)
{
var photo = photos.FirstOrDefault((p) => p.Name== Name);
if (photo == null)
{
return NotFound();
}
return Ok(photo);
}
これは、コンパイルし、私はこのようなWebリクエストを発行することができます
http://localhost:59628/api/photos
をそして、私は配列が返されます写真要素の
私はこのようなWebリクエストを発行することができます
http://localhost:59628/api/photos/2
を私はID = 2
しかし
http://localhost:59628/api/photos/"Mary B"
または
Name="Mary B"
要素が返されます
または
/GET/Name/Mary B
又は
/api/photos/name/Mary B
はエラーを返します。
私の最初の質問はなぜですか?写真のサービスに名前で問い合わせるにはどうすればよいですか?
2番目の質問:私は、ルートの設定で情報を参照してくださいが、私はをPhotosControllerにこれを追加した場合でも:
[Route("photos/{photo}/Name")]
[HttpGet]
public IHttpActionResult GetName(string Name)
{
var photo = photos.FirstOrDefault((p) => p.Name== Name);
if (photo == null)
{
return NotFound();
}
return Ok(photo);
}
私は404 WHYを取り戻しますか?
を更新する必要があります場合はチュートリアル[ASP.NET Web API 2の属性ルーティング](http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 ) – Nkosi
'WebApiConfig.cs'ファイルを見てください。あなたはそのルートについて何を気付いていますか? –
Iはconfig.Routes.MapHttpRoute( 名: "DefaultApi"、 routeTemplate: "APIは、/ {コントローラ}/{ID}"、 デフォルト:新しい{ID = RouteParameter.Optional} )を参照。 – Ron