ASP.NET MVC में, हम @Url.Action
क्रियाओं के लिए हैं। क्या ऐसा ही कुछ है @Url.Api
जो / एपीआई / नियंत्रक के लिए मार्ग होगा?
ASP.NET MVC में, हम @Url.Action
क्रियाओं के लिए हैं। क्या ऐसा ही कुछ है @Url.Api
जो / एपीआई / नियंत्रक के लिए मार्ग होगा?
जवाबों:
ApiController एक संपत्ति कहा जाता है यूआरएल प्रकार का है जो System.Web.Http.Routing.UrlHelper जो आप api नियंत्रकों के लिए यूआरएल के निर्माण के लिए अनुमति देता है।
उदाहरण:
public class ValuesController : ApiController
{
// GET /api/values
public IEnumerable<string> Get()
{
// returns /api/values/123
string url = Url.Route("DefaultApi", new { controller = "values", id = "123" });
return new string[] { "value1", "value2" };
}
// GET /api/values/5
public string Get(int id)
{
return "value";
}
...
}
यह UrlHelper न तो आपके विचारों में मौजूद है और न ही मानक नियंत्रकों में।
अपडेट करें:
और ApiController के बाहर रूटिंग करने के लिए आप निम्नलिखित कार्य कर सकते हैं:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
या किसी दृश्य के अंदर:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
httproute = ""
मार्ग टोकन नोटिस करें जो महत्वपूर्ण है।
स्पष्ट रूप से यह मानता है कि आपका Api मार्ग DefaultApi
आपके RegisterRoutes पद्धति में कहा जाता है Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
System.Web.Mvc.UrlHelper
HttpControllerContext के बाहर आपी मार्गों को बनाने के लिए सामान्य का उपयोग कैसे कर सकते हैं ।
यह सरल रूप में काम करता है Url.Action
इस प्रकार आपको किसी भी रूटिंग नाम का संदर्भ नहीं देना पड़ता है:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
area = ""
यदि क्षेत्र में URL आवश्यक हो तो आप जोड़ना चाह सकते हैं । (Api नियंत्रकों डिफ़ॉल्ट रूप से क्षेत्रों के बाहर हैं।) मैं MVC 4 का उपयोग कर रहा हूं।
Url.Action
एक दृश्य से उपयोग किया जा रहा है। Url
प्रकार का है System.Web.Mvc.UrlHelper
, और यह WebApi
मार्गों को मैप नहीं करता है । यही कारण है कि आपको अतिरिक्त पैरामीटर की आवश्यकता है new { httproute = "" }
:।
httproute""
लेकिन यह मैपिंग नहीं है = /
@Html.ActionLink("link", "Get", "Servers", new { id = r.idServer, area = "", httproute = "" }, null)
लेकिन वह पूरी तरह से काम कर रहा था
हार्डकोड किए गए स्ट्रिंग्स (नियंत्रक नामों) के बिना, एक प्रकार से लिंक उत्पन्न करने में सक्षम होना चाहते हैं?
उस के लिए एक नोगेट है! (और यह मार्क सेमैन ने लिखा है)
https://github.com/ploeh/Hyprlinkr
इस तरह काम करता है:
रूट, हमेशा की तरह:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
URL प्राप्त करें:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
परिणाम:
http://localhost/api/foo/1337
यहाँ सवाल का जवाब देने के लिए KISS विधि है:
यदि यह वह कोड है जिसका उपयोग आप MVC नियंत्रक URL बनाने के लिए करेंगे
@Url.Action("Edit", "MyController")
नियंत्रक के एपीआई संस्करण के लिए एक URL प्राप्त करने के लिए (यह मानकर कि आप उसी नियंत्रक नाम का उपयोग करते हैं) जिसका आप उपयोग कर सकते हैं
@Url.Action("Edit", "api/MyController")
सभी Url.Action विधि कर रही है, आवेदन के मूल पथ को नियंत्रक नाम के साथ जोड़ रही है, इसके बाद कार्रवाई नाम (जब तक कि यह "सूचकांक" नहीं है, जिस स्थिति में यह संलग्न नहीं है। यदि मार्ग मान ऑब्जेक्ट में एक आईडी है। प्रॉपर्टी का मूल्य URL से भी जोड़ा जाता है।
api/
अपने नियंत्रक नाम से पहले गायब था ।