谷歌上的操作通过 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?

如何通过 Asp.Net Core 中间件的 JsonResult 响应?

asp.net(C#)之NPOI&quot;操作Excel

响应式数据表 SQL C# ASP.net

在回流中,我如何从 asp.net web api 获取数据