in src/React.Router/HtmlHelperExtensions.cs [87:152]
public static IHtmlString ReactRouter<T>(
this IHtmlHelper htmlHelper,
string componentName,
T props,
string path = null,
string htmlTag = null,
string containerId = null,
bool clientOnly = false,
bool serverOnly = false,
string containerClass = null,
Action<HttpResponse, RoutingContext> contextHandler = null,
IRenderFunctions renderFunctions = null
)
{
try
{
var response = htmlHelper.ViewContext.HttpContext.Response;
var request = htmlHelper.ViewContext.HttpContext.Request;
var queryString = request != null && request.QueryString != null ? request.QueryString.ToString() : "";
if (!string.IsNullOrWhiteSpace(queryString) && !queryString.StartsWith("?"))
{
queryString = $"?{queryString}";
}
path = path ?? request.Path.ToString() + queryString;
var reactComponent
= Environment.CreateRouterComponent(
componentName,
props,
path,
containerId,
clientOnly
);
if (!string.IsNullOrEmpty(htmlTag))
{
reactComponent.ContainerTag = htmlTag;
}
if (!string.IsNullOrEmpty(containerClass))
{
reactComponent.ContainerClass = containerClass;
}
var executionResult = reactComponent.RenderRouterWithContext(clientOnly, serverOnly, renderFunctions);
if (executionResult.Context?.status != null || executionResult.Context?.url != null)
{
// Use provided contextHandler
if (contextHandler != null)
{
contextHandler(response, executionResult.Context);
}
// Handle routing context internally
else
{
SetServerResponse.ModifyResponse(executionResult.Context, response);
}
}
return new HtmlString(executionResult.RenderResult);
}
finally
{
Environment.ReturnEngineToPool();
}
}