У меня есть именованный маршрут:Названный маршрут не найден при обращении действия непосредственно, но обнаружил при доступе через AJAX
routes.MapRoute(
name: "OfficeByZipCode",
url: "RetrieveOffice/ZipCode/{zipcode}",
defaults: new { controller = "RLO", action = "RetrieveOfficeByZipCode" }
);
Я извлекая названный маршрут в действии:
public ActionResult RetrieveByZipCode(string zipCode)
{
try
{
Office obj = null;
string urlOffice;
//build a route dictionary that includes the zip code
RouteValueDictionary route = new RouteValueDictionary
{
{"zipcode", zipCode}
};
//build the relative path for the route to retrieve JSON data
VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "OfficeByZipCode", route);
//combine the relative path with the site's root path
//use the config value rather than HttpContext.Current.Request.Url to overcome issues that arise from Load Balancers and SSL offloading
urlOffice = String.Concat(Properties.Settings.Default.RootUrl, vpd.VirtualPath);
//the rest of the code. not important for this example
Теперь, я доступ к этому действие одним из двух способов:
One, с помощью AJAX, с другой страницы:
$.ajax({
url: "Test/RetrieveByZipCode",
type: "POST",
data: JSON.stringify(formData),
dataType: "html",
contentType: "application/json; charset=utf-8",
success: function (data) {
$("#content").html(data);
},
error: function (error) {
alert("Error");
}
});
Два, непосредственно через браузер:
http://localhost/RLOService/test/RetrieveByZipCode/92677
При обращении действия непосредственно, эта линия возвращается нуль:
VirtualPathData vpd = RouteTable.Routes.GetVirtualPath(null, "OfficeByZipCode", route);
Но, это прекрасно работает при вызове же действие с помощью AJAX ,
Очевидное различие между двумя - это то, к которому я обращаюсь через POST (AJAX), а другой доступ через GET (URL). Если я изменил действие AJAX на GET, я получаю ту же ошибку. Почему это имеет значение?
он ожидает URL как HTTP: //host..../RetrieveOffice/ZipCode/ {ZipCode} и ваш прямой адрес матча оленьей кожи с ним – HaBo
@HaBo: Я не уверен, что вы имеете в виду. Как это объясняет разницу в поведении между POST и GET? –