На данный момент у меня есть два метода ASP.Net Core: один привязан к вызову API, а другой — к помощнику Razor на стороне клиента.
Они оба находятся в моем HomeController.cs
.
API:
Вот вызов API:
[HttpGet("api/GetImage")]
public async Task<ActionResult> ImageFromPath()
{
RestClient client = new RestClient("http://IPADDRESS/cgi-bin/snapshot.cgi?channel=0");
RestRequest request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Basic aYu7GI");
TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>();
RestRequestAsyncHandle handle = client.ExecuteAsync(request, r => taskCompletion.SetResult(r));
RestResponse response = (RestResponse)(await taskCompletion.Task);
return File(response.RawBytes, "image/png");
}
Бритва:
Вот помощник Razor:
public async Task<ActionResult> ImageFromPath()
{
RestClient client = new RestClient("http://IPADDRESS/cgi-bin/snapshot.cgi?channel=0");
RestRequest request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Basic aYu7GI");
TaskCompletionSource<IRestResponse> taskCompletion = new TaskCompletionSource<IRestResponse>();
RestRequestAsyncHandle handle = client.ExecuteAsync(request, r => taskCompletion.SetResult(r));
RestResponse response = (RestResponse)(await taskCompletion.Task);
return File(response.RawBytes, "image/png");
}
Как видите, приведенные выше тела методов полностью одинаковы. У одного просто есть аннотация HttpGet
.
Тем не менее, в сочетании с обработчиками на стороне клиента они дают разные результаты.
API:
Клиентский обработчик вызова API:
<img ng-src="{{imageSrc}}">
$http.get('/api/GetImage', { headers: { 'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8' } }).then(function (response) {
$scope.imageSrc = response.data;
});
Бритва:
Клиентский обработчик для помощника Razor:
<img src="@Url.Action("ImageFromPath")" id="img2" />
Вот где результаты показывают:
API:
Вот вызов API preview
на вкладке "Сеть":
Бритва:
Вот вызов помощника Razor preview
на вкладке «Сеть»:
API:
Вот вызов API headers
на вкладке "Сеть":
Бритва:
Вот вызов помощника Razor headers
на вкладке «Сеть»:
API:
Почему помощник Razor фактически создает/возвращает изображение, а вызов API — нет? Как сделать так, чтобы вызов API возвращал изображение так же, как это делает помощник Razor?
http://localhost:xxx/api/GetImage
в браузере, он что-нибудь покажет? - person Win   schedule 12.07.2017$(#img1)...
в вызове$http.get
на стороне клиента - person LatentDenis   schedule 12.07.2017