XMlHTTPRequest 응답 본문을 통해 JSON 문자열을 반환하려고합니다. 문제는 AjaxResourceHandler의 메소드 작성 및 인스턴스 이후에 빈 문자열을 리턴하는 필수 데이터를 얻기 전에 Get 메소드를 실행하는 것입니다. 내가 원하는 것은 json 문자열로 응답 본문을 반환 할 수 있어야한다는 것입니다. 과 한 가지 더. webbrowser는 똑같은 일을 할 수 있습니까? 그렇다면 어떻게?Books 돌아 가기 dotnetbrowser
using AjaxRequest.Models;
using DotNetBrowser;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
namespace AjaxRequest.Controllers
{
public class ValuesController : ApiController
{
private static List<string> ajaxUrls = new List<string>();
private static List<string> sourceDat = new List<string>();
private static Browser browser;
public ValuesController()
{
browser = BrowserFactory.Create();
browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler();
browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate();
browser.LoadURL("https://www.w3schools.com/xml/ajax_examples.asp");
//browser.Dispose();
}
// GET api/values
public IEnumerable<string> Get()
{
//Init();
return sourceDat;
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
//private void Init()
//{
//}
public class AjaxResourceHandler : ResourceHandler
{
public bool CanLoadResource(ResourceParams parameters)
{
if (parameters.ResourceType == ResourceType.XHR && parameters.URL.Contains("https://123movies.is/ajax/v2_get_sources"))
{
ajaxUrls.Add(parameters.URL);
}
return true;
}
}
public class AjaxNetworkDelegate : DefaultNetworkDelegate
{
public override void OnDataReceived(DataReceivedParams parameters)
{
if (ajaxUrls.Contains(parameters.Url))
{
PrintResponseData(parameters.Data);
}
}
public void PrintResponseData(byte[] data)
{
var str = Encoding.UTF8.GetString(data);
BookSource _sources = JsonConvert.DeserializeObject<BookSource>(str);
sourceDat.Add(_sources.ToString());
browser.Dispose();
//source.Add(_sources);
//return source;
}
}
}
}
매우 효과적입니다. ObjectForScripting을 살펴볼 것입니다. – Cody