我有两个web-apis
public string GetRData(string data)
{
var serialPort = new SerialPort("COM1", 9600, Parity.Even, 8, StopBits.One);
try
{
if(serialPort.IsOpen)
{
var stream = new SerialStream(serialPort);
stream.ReadTimeout = 2000;
//byte[] bytestoread = new byte[9999];
byte[] bytestosend = StringToByteArray(data);
serialPort.Write(bytestosend, 0, bytestosend.Length);
//receiveData = serialPort.ReadExisting();
serialPort.Close();
}
else
{
//serial port settings and opening it
serialPort.Open();
var stream = new SerialStream(serialPort);
stream.ReadTimeout = 2000;
//byte[] bytestoread = new byte[9999];
byte[] bytestosend = StringToByteArray(data);
serialPort.Write(bytestosend, 0, bytestosend.Length);
//receiveData = serialPort.ReadExisting();
serialPort.Close();
}
}
catch(Exception ex)
{
}
return data;
}
public string GetPData(string id)
{
var serialPort = new SerialPort("COM2", 9600, Parity.Even, 8, StopBits.One);
string receiveData = "";
try
{
//serial port settings and opening it
serialPort.Open();
var stream = new SerialStream(serialPort);
stream.ReadTimeout = 2000;
//byte[] bytestoread = new byte[9999];
//byte[] bytestosend = StringToByteArray(data);
//serialPort.Write(bytestosend, 0, bytestosend.Length);
receiveData = serialPort.ReadExisting();
serialPort.Close();
}
catch (Exception ex)
{
}
return receiveData;
}WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "GetRData",
routeTemplate: "api/{controller}/{action}/{data}",
defaults: null
);
config.Routes.MapHttpRoute(
name: "GetPData",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);每当我试图点击GetPData时,我就会在Postman中得到以下响应
{“消息”:“没有找到与请求URI‘https://localhost:44337/api/rtu/GetPData/1’匹配的HTTP资源。”、"MessageDetail":“在与请求匹配的控制器'RTU‘上没有找到任何操作。”}
我一直在寻找这个问题,但却找不到解决办法。
注意: GetRData运行得很好
发布于 2020-05-11 11:05:25
您正在URI中包含操作,而不是依赖约定进行路由匹配,因此您应该添加属性来显式指定允许的HTTP谓词:
[HttpGet]
public string GetPData(string id)话虽如此,您的动作确实以"Get“开头,因此应该是它与之匹配的动词。您应该确保请求是"GET“。否则,路由看起来没问题。你试过用URL点击它吗:
https://stackoverflow.com/questions/61725638
复制相似问题