.NET 4.5 ve Web API 2'nin son sürüm sürümlerini kullanıyorum (Visual Studio 2013'te). this documentation referans olarak kullanıyorum, boşuna. Web API 2 yönlendirme öznitelikleri çalışmıyor
ben gibi olmak URL'leri istiyorumapi/providers
api/locations
api/specialties
gibi birkaç baz yolları Ve İdeal
Get()
Get(int id)
Get(string keyword)
Autocomplete(string keyword)
Search(string zipcode, string name, int radius, [...])
gibi her bazı yöntemleri var
- /api/locations/12345 (konum 12345)
- /API/yerleri/klinik (adında "klinik" ile konumlarını olsun)
- /API/yerleri/otomatik tamamlama? Keyword = klinik ("klinik alan yerler için bir özet kimliği + Adı nesneyi almak ") adında
- /aPI/yerleri/search? zipcode = 12345 & yarıçap = 20 & name = klinik (get ile zip 12345 20 mil çevresindeki konumlar ") adına" klinik
Aşağıdaki kod yığınında, Get
yöntemleri ve Search
istendiği gibi çalışır, ancak Autocomplete
bunu yapmaz. Birden fazla kontrolörde benzer şekilde adlandırılmış yöntemlere sahip olduğum belirtilmelidir. Neyi yanlış yapıyorum? (Ayrıca, tam için Name =
mülkiyet nedir?)
/// <summary>
/// This is the API used to interact with location information.
/// </summary>
[RoutePrefix("api/locations")]
public class LocationController : ApiController
{
private ProviderEntities db = new ProviderEntities();
private static readonly Expression<Func<Location, LocationAutocompleteDto>> AsLocationAutocompleteDto =
x => new LocationAutocompleteDto
{
Id = x.Id,
Name = x.Name
};
/// <summary>
/// Get ALL locations.
/// </summary>
[Route("")]
public IQueryable<Location> Get()
{
return db.Locations.AsQueryable();
}
/// <summary>
/// Get a specific location.
/// </summary>
/// <param name="id">The ID of a particular location.</param>
[Route("{id:int}")]
public IQueryable<Location> Get(int id)
{
return db.Locations.Where(l => l.Id == id);
}
/// <summary>
/// Get all locations that contain a keyword.
/// </summary>
/// <param name="keyword">The keyword to search for in a location name.</param>
[Route("{keyword:alpha}")]
public IQueryable<Location> Get(string keyword)
{
return db.Locations.Where(l => l.Name.Contains(keyword)).OrderBy(l => l.Name);
}
[Route("search", Name = "locationsearch")]
public string Search(string zipcode = null, string latitude = null, string longitude = null)
{
if (zipcode != null) return "zipcode";
if (latitude != null && longitude != null) return "lat/long";
else
return "invalid search";
}
/// <summary>
/// Autocomplete service for locations, returns simple Id/Name pairs.
/// </summary>
/// <param name="keyword">The keyword to search on.</param>
[Route("autocomplete/{keyword:alpha}", Name = "locationautocomplete")]
public IQueryable<LocationAutocompleteDto> Autocomplete(string keyword)
{
// validate the inputs
if (string.IsNullOrEmpty(keyword))
return null;
IQueryable<Location> results = from l in db.Locations
where l.Name.Contains(keyword)
select l;
return results.Select(AsLocationAutocompleteDto);
}
henüz bu şeyler son sürümleri etrafında toplum çok destek olmaya görünmüyor. (Cevap)
DÜZENLEME
Basitçe[Route("autocomplete"), Route("autocomplete/{keyword:alpha}", HttpGet()]
ile
[Route("autocomplete/{keyword:alpha}", Name = "locationautocomplete")]
yerini ve mükemmel çalışıyor.
teşekkür ederiz bir ad belirtin gerekir nerede !! '[Rota (" autocomplete/{keyword: alpha} ", Name =" locationautocomplete ")]' '' '' '' (Route ("otomatik tamamlama"), Route ("autocomplete/{keyword: alpha}"), HttpGet’i değiştirdim()] ve şimdi mükemmel çalışıyor. 'HttpGet()' özniteliği önemliydi ve iki 'Rota() 'tanımlarının zincirlenmesi, onu istediğim iki farklı şekilde çalıştırıyor. –