использование контроллера MVC в качестве веб-сервиса - PullRequest
1 голос
/ 17 декабря 2011

Вот мой проект:

enter image description here

из browser.js Я пытаюсь вызвать ManagerController:

 $("#jstree").jstree({
        "json_data": {

    "ajax": {   


                type: "GET",
                async: true,
                "url": "Controllers/Manager/Getlocations?userId='1234'",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                cache: false,
                success: function (msg) {                         
                        return msg;
                },
                error: function () {
                    // TODO process error
                }
            },

//continuation is less relevant

Но я получаю следующееошибка в консоли Chrome:

GET http://localhost:1186/MainUgi/Controllers/Manager/Getlocations?userId='1234'&_=1324071607446 404 (не найдено)

1) каким должен быть правильный путь?

2) что такое &_=1324071607446, который соединяется до конца моего запроса на получение?

update

мой контроллер выглядит так:

  public class ManagerController : Controller
    {

        public JsonResult GetLocations(string userId)
        {
            var locationsJson = 
            new {[  {"data": "[0]", .. some data...}  ]};

            return Json(locationsJson, JsonRequestBehavior.AllowGet);
        }

мой запрос выглядит так:

Request URL:http://localhost:1186/MainUgi/Controllers/Manager/Getlocations?userId=1234
Request Method:GET
Status Code:404 Not Found
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:windows-1255,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Type:application/json; charset=utf-8
Host:localhost:1186
Referer:http://localhost:1186/MainUgi/browser.htm
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
X-Requested-With:XMLHttpRequest
Query String Parametersview URL encoded
userId:1234
Response Headersview source
Cache-Control:private
Connection:Close
Content-Length:2346
Content-Type:text/html; charset=utf-8
Date:Fri, 16 Dec 2011 22:00:37 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319

TIA

Ответы [ 3 ]

2 голосов
/ 17 декабря 2011

Основная маска URL MVC следующая:

/{CONTROLLER}/{ACTION}?{...PARAMETERS}

По вашему примеру имеем:

'/manager/getLocations?userId=1234'

И контроллер должен иметь следующий код (пример):

[ControllerAction]
public void getLocations( int userId ) {
    ViewData["UserId"] = userId;
    RenderView("GetLocations");
}

Теперь для просмотра содержимого необходим файл просмотра. Создайте папку (внутри корня проекта) с именем «View», а внутри нее создайте еще одну папку с именем контроллера (Manager) и создайте файл представления с именем «GetLocations.aspx» (тот, который мы хочу попросить сделать).

Чтобы напечатать переменную UserId в представлении:

<%= ViewData["UserId"] %>

Если это не сработает, вам лучше много почитать о паттерне MVC. Вы можете начать здесь .

2 голосов
/ 17 декабря 2011

Надеюсь, это поможет:

  1. Попробуйте удалить одинарные кавычки из userId='1234' -> userId=1234
  2. Параметр _=1324071607446 - это jQuery, добавляющий метку времени в конец URL-адреса запроса для предотвращения кэширования (обратите внимание, как вы использовали cache: false).
0 голосов
/ 17 декабря 2011

Попробуйте разделить URL и данные на две отдельные команды:

url:  "Controllers/Manager/Getlocations",
data: { userId: '1234' }

Также попробуйте пометить метод как [HttpGet], если этот метод перегружен.

...