Я хочу перевести существующий веб-сайт в SPA с поддержкой REST из WebApi 2. Я не хочу, чтобы службы были частью моего существующего проекта, но я хотел бы иметь возможность отправлять запросы из JavaScript на свой уровень веб-API. Было бы неплохо, если бы я мог использовать api.mywebsite.com, но браузеры будут блокировать междоменный запрос.
Вместо этого я предполагаю, что мне придется добавить что-то, чтобы захватить определенный маршрут, например: mysite.com/api/*. Как правильно это сделать? Кажется, я не могу найти никаких ресурсов, которые рассказывают о том, чтобы делать что-то подобное.
Я пытаюсь создать что-то подобное с помощью одностраничного приложения. Тем не менее, я хочу позвонить прямо в веб-api из своего клиента.
2 ответа
Если вы хотите разделить Сервис и приложение, у вас есть несколько вариантов:
Используйте JSONP. Он поддерживает только запросы GET. Это может работать, если ваше приложение время от времени выполняет запросы GET к некоторому общедоступному API (например, Twitter), но это не подходит для приложения, ориентированного на данные, со многими запросами в стиле Restfull или RPC.
Используйте CORS. . Это стандарт W3C, который позволяет серверу ослабить политику одного и того же происхождения. Используя CORS, сервер может явно разрешить одни запросы из разных источников, отклоняя другие. Одним из недостатков этого варианта является то, что он поддерживает только IE10 +. См. Дополнительную поддержку просмотра CORS. Включение запросов между исходными данными в Веб-API ASP.NET.
Разделите приложение и службу, но разместите их в одном домене.
Итак, у вас есть веб-API в одном домене и ваше одностраничное приложение в другом. Вот пример того, как вы можете вызывать действия веб-API из одностраничного JS-приложения.
WebAPI
public Book GetBook(int id)
{
Book book = _repository.Get(id);
if (book == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));`
}
return book;
}
Выше показан ваш метод веб-API. Я предполагаю, что вы уже обо всем этом позаботились. Ниже приведен код AJAX, который вызовет ваш метод API.
$.ajax({
url: 'http://myurl.com/<controllerName>/GetBook',
type: 'GET',
dataType: 'jsonp',
success: function (data) {
alert(data.msg);
}
})
Я считаю, что это все, что вам нужно. Вы можете использовать Fiddler для просмотра обмена данными. Вывод будет в формате JSON.
Похожие вопросы
Связанные вопросы
Новые вопросы
asp.net
ASP.NET - это среда разработки веб-приложений Microsoft, которая позволяет программистам создавать динамические веб-сайты, веб-приложения и веб-службы. Полезно использовать этот тег в сочетании с тегом типа проекта, например, [asp.net-mvc], [asp.net-webforms] или [asp.net-web-api]. НЕ используйте этот тег для вопросов о ASP.NET Core - используйте вместо этого [asp.net-core].