Como você mencionou na resposta do @Developer, provavelmente codificaria o HTML na entrada do usuário. Se você está preocupado com o XSS, provavelmente nunca precisará da entrada do usuário em sua forma original, para que possa escapar dela (e substituir espaços e novas linhas enquanto estiver fazendo isso).
Observe que escapar na entrada significa que você deve usar @ Html.Raw ou criar um MvcHtmlString para renderizar essa entrada específica.
Você também pode tentar
System.Security.SecurityElement.Escape(userInput)
mas acho que também não vai escapar dos espaços. Então, nesse caso, sugiro apenas fazer um .NET
System.Security.SecurityElement.Escape(userInput).Replace(" ", " ").Replace("\n", "<br>")
na entrada do usuário. E se você quiser se aprofundar na usabilidade, talvez possa fazer uma análise XML da entrada do usuário (ou brincar com expressões regulares) para permitir apenas um conjunto predefinido de tags. Por exemplo, permita
<p>, <span>, <strong>
... mas não permita
<script> or <iframe>