如何在 Grpc 请求中传递枚举
How to Pass enum In Grpc Request
我想使用枚举或类似方法为我的 gRPC 服务器定义这样的路由器或映射
我有一个名为 ServerHubService 的简单服务和一个 Hubs 文件夹,其中有一些 classes 将处理每个请求,这些请求将由客户端传递到我的 gRPC 服务器
这是我项目的截图
Project Structure
现在可以在照片中看到
文件内容也是下图
HubMap.cs
如你所见,我想定义一个 switch case 语句 运行 diffrent classes
这是我的 ServiceHubService gRPC class
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:这是什么错误
问题 2:
如何在 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
是你的朋友。
我建议您查看 google protobuf 指南。
生成的枚举将是 PascalCase (FOO_BAR => FooBar)
我想使用枚举或类似方法为我的 gRPC 服务器定义这样的路由器或映射
我有一个名为 ServerHubService 的简单服务和一个 Hubs 文件夹,其中有一些 classes 将处理每个请求,这些请求将由客户端传递到我的 gRPC 服务器
这是我项目的截图 Project Structure 现在可以在照片中看到 文件内容也是下图 HubMap.cs
如你所见,我想定义一个 switch case 语句 运行 diffrent classes
这是我的 ServiceHubService gRPC class 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:这是什么错误
问题 2:
如何在 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
是你的朋友。
我建议您查看 google protobuf 指南。
生成的枚举将是 PascalCase (FOO_BAR => FooBar)