谷歌上的操作通过 ASP.NET C# 做出响应
Posted
技术标签:
【中文标题】谷歌上的操作通过 ASP.NET C# 做出响应【英文标题】:Actions on google make response via ASP.NET C# 【发布时间】:2021-06-28 08:09:09 【问题描述】:也许有人知道怎么做?为了更好地理解,我附上了截图。我正在使用 ASP.NET。
我成功收到了请求,但我不知道如何处理它以及如何做出回复。例如消息“Test123”
命名空间 GoogleAssistantServer.Controllers
[Route("api/[控制器]")]
[ApiController]
public class GoogleController : ControllerBase
[HttpGet]
public IActionResult Get()
var result = new Result();
result.Value1 = 123;
return Ok(result);
[HttpPost]
public async Task<IActionResult> PostWebHook()
string body;
using (var reader = new StreamReader(Request.Body))
body = await reader.ReadToEndAsync();
return Ok("Test123");
public class Result
public int Value1 get; set;
public int Value2 get; set;
我应该如何在这里处理请求然后返回一些东西?例如消息“Test123”
这是我得到的,但我不知道如何处理它并发送回响应。
"handler":"name":"abc","intent":"name":"actions.intent.MAIN","params":,"query":"Mit Google sprechen","scene":"name":"actions.scene.START_CONVERSATION","slotFillingStatus":"UNSPECIFIED","slots":,"next":"name":"Start_Frage","session":"id":"ABwppHHVumDrliLJaLSikS6KnIlN7yYv6Z4XJCOYzEZt8Fr08RH6r0wtM2-E0v40lS2p1YosTDfpSCd5Lw","params":,"typeOverrides":[],"languageCode":"","user":"locale":"de-DE","params":,"accountLinkingStatus":"ACCOUNT_LINKING_STATUS_UNSPECIFIED","verificationStatus":"VERIFIED","packageEntitlements":[],"gaiamint":"","permissions":[],"lastSeenTime":"2021-04-01T10:06:59Z","home":"params":,"device":"capabilities":["SPEECH","RICH_RESPONSE","LONG_FORM_AUDIO"]
【问题讨论】:
以后请包括所有代码和响应而不是图像。 您可以在您的方法中接收数据,但您应该返回的主要是 200 状态,但您传递的其他数据取决于 webhook 处理服务如何处理这些事情。 【参考方案1】:请求以 JSON 格式发送给您。您需要将其解析为一个对象,以便您可以使用它。
您需要做的第一件事是定义即将退役的对象。这在request object format 中有记录。
非常基本的例子。
public class Handler
public string name get; set;
public class Params
public string UserId get; set;
public int NumVisits get; set;
public class Intent
public string name get; set;
public Params @params get; set;
public string query get; set;
public class Slots
public class Next
public string name get; set;
public class Scene
public string name get; set;
public string slotFillingStatus get; set;
public Slots slots get; set;
public Next next get; set;
public class Session
public string id get; set;
public Params @params get; set;
public List<object> typeOverrides get; set;
public string languageCode get; set;
public class User
public string locale get; set;
public Params @params get; set;
public string accountLinkingStatus get; set;
public string verificationStatus get; set;
public List<object> packageEntitlements get; set;
public string gaiamint get; set;
public List<object> permissions get; set;
public DateTime lastSeenTime get; set;
public class Home
public Params @params get; set;
public class Device
public List<string> capabilities get; set;
public class Response
public Handler handler get; set;
public Intent intent get; set;
public Scene scene get; set;
public Session session get; set;
public User user get; set;
public Home home get; set;
public Device device get; set;
一旦你定义了你的对象,你就可以反序列化请求。
var values = JsonSerializer.Deserialize<Response>(body);
由于目前还没有人为动作创建库,因此您需要自己做。
同样,对于响应,您需要发回使用response object format 格式化的 JSON。
【讨论】:
您能否提供一个示例,我将如何发回该 JSON 对象。那会很有帮助。谢谢 对不起,我不能提到没有图书馆。 SO 不提供示例,我们可以帮助您解决代码问题。如果您有任何问题,请自行尝试打开一个与之相关的新问题并包含您的代码。我会说在发回时注意 UTF 类型,我会记住导致问题的原因以上是关于谷歌上的操作通过 ASP.NET C# 做出响应的主要内容,如果未能解决你的问题,请参考以下文章
PartialViewResult 表单不会清除 ajax 结果上的值 - ASP.NET Core Razor c#
ASP.NET C# SuppressFormsAuthenticationRedirect 不适用于 Ajax POST?