gpt4 book ai didi

c# - 如何在 Grpc 请求中传递枚举

转载 作者:行者123 更新时间:2023-12-05 02:43:35 26 4
gpt4 key购买 nike

我想使用枚举或类似方法为我的 gRPC 服务器定义这样的路由器或映射

我有一个名为 ServerHubService 的简单服务和一个 Hubs 文件夹,其中有一些类将处理每个请求,这些请求将由客户端传递到我的 gRPC 服务器

这是我项目的截图 Project Structure现在可以在照片中看到文件内容也是下图 HubMap.cs

如你所见,我想定义一个 switch case 语句来运行不同的类

这是我的 ServiceHubService gRPC 类 ServerHubService.cs

最后这是我的客户端调用 grpc-client.cs

Visual Studio 2019 版本 16.10

这是我的 ServerHub.proto 文件:

syntax = "proto3";

option csharp_namespace = "NetPlus.Server.Core";

package server;


service ServereHub {

rpc ActionManager (ActionRequest) returns (ActionResult);

}

message ActionRequest {
string ActionType = 1;
}

message ActionResult {
string ActionResultType = 1;
}

我的 ServerHubService.cs:

using Microsoft.Extensions.Logging;
using NetPlus.Server.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using NetPlus.Server.Core.Hubs;
namespace NetPlus.Server.Core
{
public class ServerHubService : ServereHub.ServereHubBase
{
private readonly ILogger<ServerHubService> _logger;

public ServerHubService(ILogger<ServerHubService> logger)
{
_logger = logger;
}

public override Task<ActionResult> ActionManager(ActionRequest request, ServerCallContext context)
{
HubMap map = new HubMap();
HubMap.HubSelector selector;


return Task.FromResult(new ActionResult
{
ActionResultType = map.HubProccessor(selector)
}) ;
}
}

}

和Hubmap.cs

using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace NetPlus.Server.Core.Hubs
{
public class HubMap
{
Switcher switcher = new Switcher();

public string HubNameResult { get; set; }
public enum HubSelector
{
SwitchServer_Off = 1

}

public string HubProccessor(HubSelector hName) =>


hName switch
{
HubSelector.SwitchServer_Off => switcher.PutOffline(),

_=> "Error Proccesing Hub"
};


}

}

问题 2:这是什么错误 enter image description here

问题二:

如何在 HubMap.cs 中检测 proto 文件和进程中定义的枚举

最佳答案

如果您想通过 gRPC 传递枚举:定义 gRPC 术语中的枚举:

syntax = "proto3";

option csharp_namespace = "NetPlus.Server.Core";

package server;

enum ActionType
{ // whatever contents...
Foo = 0;
Bar = 1;
Blap = 2;
}
enum ActionResultType
{
// ... etc
}
service ServereHub {
rpc ActionManager (ActionRequest) returns (ActionResult);
}

message ActionRequest {
ActionType Action = 1;
}

message ActionResult {
ActionResultType Result = 1;
}

并使用生成的 枚举。如果您不想这样做,而是想使用string:那么所有前后转换都由您决定ToString()Enum.Parse 是你的 friend 。

关于c# - 如何在 Grpc 请求中传递枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66869715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com