The SetGameResults action is designed to accept querystring parameters but your React code sends the parameters in the message body (HTTP POST).
The standard is passing an object to a Web API Post action not querystring parameters. I recommend learning model binding and Web API fundamentals rather than guessing how Web API works.
Example action:
[HttpPost]
[Route("SetGameResults")]
public string SetGameResults(DtoData data)
{
if (!(data.us1 >= 1 && data.us2 >= 1))
{
return $"IF -- us1:{data.us1} us2:{data.us2}";
}
return $"us1:{data.us1} us2:{data.us2}";
}
Example object:
public class DtoData
{
public byte? us1 { get; set; }
public byte? us2 { get; set; }
}
Lastly, I question the nullable parameter design and general logic since there's no null checks. The code checks for both values NOT being greater than or equal to one but not null. If null is passed then the same missing parameter exception will fire. It seems to me that you need to rethink the approach. At least simplify the logic.
I would do this check in the React application. Only send the HTTP request if us1 and us2 are zero which is ultimately how the logic is designed. Correct?