2013-08-15 32 views
10

Controller/A/<anId> bağlamak için bir API kontrolöre en iyi bağlantı:Bunu nasıl

@Html.ActionLink(anId, "Action", "Controller", new {id = anId}) 

Eylem resharper tarafından altı çizili ve ben F12 ile kendisine gezinebilirsiniz.

@Html.ActionLink("API Version", "../api/controller/", new {id = anId}) 

Bu resharper navigasyon seçeneği yok ve ben denetleyicisi yeniden adlandırırsanız, tekrar elden gitmiyor:

Ama bir API denetleyicisi için bir bağlantı var. Bir APIC denetleyicisine tıraş bıçağı görünümünden bağlantı vermek için daha temiz bir yol var mı? Özellikle bir Resharper tanır.

cevap

5

Aslında api yollarını güncellemeniz gerekir, çünkü api varsayılan olarak bir eylem içermez.

config.Routes.MapHttpRoute(
    name: "ActionRoute", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Sonra şöyle bir bağlantı oluşturabilir:

Yani bu yol ekleyin

@Url.RouteUrl("ActionRoute", new {httproute= "", controller = "controller", action = "action"}); 

DÜZENLEMEYİ

Ben tekrar okumak soru ve Götürmezse Bir eylem hakkında bir şey söyleme, bu yüzden her iki şekilde de, yine de'ü kullanabileceğinizi düşündüm 210:

@Url.RouteUrl("DefaultApi", new {httproute= "", controller = "MyApiController"}); 

Ayrıca şöyle yerine kısayol yöntemi Url.HttpRouteUrl kullanabilirsiniz::

@Url.HttpRouteUrl("DefaultApi", new { controller = "MyApiController" }) 

diğer cevaplar şöyle

@Url.RouteUrl("DefaultApi", new {httproute= "", controller = "controller"}); 
+0

İyi cevap. RouteParameter için yazım hatası not alın (RouterParameter değil). – iCode

3

Resharper hakkında Bilmiyorum ama bunu yapabilirdi: Eğer httproute = "" geçerseniz

@Html.ActionLink(
    "API Version", 
    "Action", 
    "Controller", 
    new { id = anId, httproute = "" }, 
    null 
) 

, yardımcı yönlendirme tanımlarını kullanarak API denetleyiciye bir url üretecektir.

+0

Alternatif bir aşırı yükleme kullanmak zorunda kaldım (lütfen düzenlemeyi gözden geçirin), fakat aldığım link 'http: // localhost: 64404/Controller/Action/anId' api'den bahsedilmiyor. – weston

+0

Bunu söylediğiniz gibi kullandığımda, http: // localhost: 64404/source/Action? Uzunluğu = 10' – weston

+0

bağlantıya geçiyorum. Şimdiye kadarki en yakın: '@ Html.ActionLink (" API Sürümü ", null, new {id = Model.Id.Name, httproute = ""}) 'verimleri:' http: // localhost: 64404/api/controller/anId? Action = detay' – weston

8

Eğer Url.RouteUrl şöyle kullanabilirsiniz zaten sürmüşlerdir Yeni bir WebApi projesi oluştururken "DefaultApi" varsayılan Yol adıdır. Bu dize, HttpRoute öğenizi WebApiConfig.cs dosyasında verdiğiniz adla eşleşmelidir.

Bu iki çözümün her ikisi de yalnızca rotanın URL'sini oluşturmanıza yardımcı olur, aslında sizin için bir HTML bağlantısı oluşturmazlar.

@Html.RouteLink("My Link Text", "DefaultApi", new { controller = "MyApiController" }) 

Bu yöntem çok benzer arayüz sağlar: Eğer Razor sizin için HTML çapa etiketi oluşturmak istiyorsanız

<a href="@Url.HttpRouteUrl("DefaultApi", new { controller = "MyApiController" })">My Link Text</a> 

, bunun yerine bu yöntemi kullanabilirsiniz: Bu gibi onları kullanmak gerekir Düzenli Denetleyici/Eylem linkleri için kullanılan @Html.ActionLink.

Bu çözümlerin tümü, ReSharper ile çalışmak için tıklamanın yapılmasına izin verir.

+0

Bu çözümü, açık httproute = "" parametresine olan ihtiyacı ortadan kaldırdığından beğeniyorum. –

+0

@ Html.RouteLink() doğru URL vermeyerek. MVC 5'de kontrol ettim – yogihosting

İlgili konular