Próbuję uzyskać następujące (i podobne) adresy URL do pracy w moim ASP.net MVC4 projektu/WebAPI:trasa ASP.net MVC4 WebAPI z nazwy pliku w to
http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll
Trasa odpowiedzialnej dla tego adresu URL wygląda następująco:
config.Routes.MapHttpRoute(
name: "Nav",
routeTemplate: "api/nav/{project}/{assembly}/{namespace}/{type}/{member}",
defaults: new { controller = "Nav", assembly = RouteParameter.Optional, @namespace = RouteParameter.Optional, type = RouteParameter.Optional, member = RouteParameter.Optional }
);
Działa dobrze, jeśli usunę. w nazwie pliku lub jeśli dodaję ukośnik za adresem URL, ale oznacza to również, że nie mogę użyć metody Url.Route
-metody itp. Błąd, który otrzymuję, to ogólny błąd 404 (zdjęcie poniżej).
Próbowałem dodanie <httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />
do mojego web.config, a ja też próbowałem dodając
<compilation debug="true" targetFramework="4.5">
<buildProviders>
<remove extension=".dll"/>
<remove extension=".exe"/>
</buildProviders>
</compilation>
I żaden z nich wydaje się działać. Moje pytanie brzmi w zasadzie, jak mogę uruchomić ten URL i poprawnie mapować?
Tylko ostatnia część trasy może być opcjonalna. W pokazanym przykładzie wykonałeś wszystkie parametry trasy z wyjątkiem projektu opcjonalnego, co oczywiście nie jest możliwe. Również w adresie URL, który pokazałeś, brakuje fragmentów adresu "namespace" i "type". Tylko część 'member' może być opcjonalna, ponieważ jest zdefiniowana na końcu trasy. –
To nie jest prawda, a udowodniono, że działa bez problemów. Możesz mieć dowolną liczbę części, jak chcesz. Na przykład, nawet przed zmianą, którą właśnie wprowadziłem w mojej odpowiedzi, URL '/ api/nav/SpotiFire' działał jako urok. – Alxandr