2014-08-28 1 views
1

У меня есть именованный маршрут:Названный маршрут не найден при обращении действия непосредственно, но обнаружил при доступе через 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, я получаю ту же ошибку. Почему это имеет значение?

+0

он ожидает URL как HTTP: //host..../RetrieveOffice/ZipCode/ {ZipCode} и ваш прямой адрес матча оленьей кожи с ним – HaBo

+0

@HaBo: Я не уверен, что вы имеете в виду. Как это объясняет разницу в поведении между POST и GET? –

ответ

2

Измени GET Url, чтобы ZipCode параметра (например, http://localhost/RLOService/test/RetrieveByZipCode?zipCode=92677)

Смежные вопросы