Criar um robots.txt dinamicamente em ASP.NET é simples, inclusive existem várias formas de fazer isto, abaixo vou mostrar dois exemplos.
No primeiro exemplo vamos usar o web.config para reescrever a URL do robots.txt, ou seja, ele não vai existir fisicamente, apenas será remapeado.
Este exemplo serve para reescrever a URL de qualquer arquivo .txt com ASP.NET, não apenas do robots.txt.
No outro exemplo vou mostrar como criar e editar o arquivo robots.txt com C#, desta vez o arquivo existirá fisicamente.
robots.txt dinâmico utilizando o web.config.
Vamos utilizar o URL Rewrite para reescrever a URL (/robots.txt) antes que ela seja processada pelo IIS.
No browser a URL ficará assim:
http://localhost/robots.txt
Mas estará executando a URL:
http://localhost/robots.aspx
O web.config ficou assim:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<system.webServer>
<rewrite>
<rules>
<rule name="Rewrite robots.txt" >
<match ignoreCase="true" url="^robots.txt$" />
<action type="Rewrite" url="robots.aspx" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
A página Robots.aspx.cs ficou assim:
protected void Page_Load(object sender, EventArgs e)
{
//Limpa o conteúdo
Response.Clear();
//Esta linha vai fazer com que a página retorne um txt
Response.ContentType = "text/plain";
//Escrever o conteúdo do arquivo .txt
Response.Write(@"User-agent: *
Allow: /");
//Termina aqui
Response.End();
}
Nota: Para usar o web.config o URL Rewrite deve estar instalado, mais detalhes no link abaixo.
http://www.iis.net/downloads/microsoft/url-rewrite
Criar e manipular o arquivo robots.txt com C#
Desta vez vamos criar o arquivo robots.txt na raiz do site e depois editá-lo.
Para este exemplo, usei um formulário (Defautl.aspx) para criar, caso não exista, e depois editar o conteúdo do robots.txt.
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox runat="server" ID="txtRobots" TextMode="MultiLine" />
</div>
<div>
<asp:Button ID="btnSave" Text="Salvar" OnClick="btnSave_Click" runat="server" />
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//Path do arquivo robots.txt
//C:\inetpub\wwwroot\nomedosite\robots.txt
string strFile = System.Web.HttpContext.Current.Server.MapPath("~/robots.txt");
//Se arquivo não existir
if (!File.Exists(strFile))
{
//Criar o arquivo,
//Estou usando o using para fazer o Dispose automático do arquivo após criá-lo.
using (FileStream fs = File.Create(strFile)) { }
}
//Abrindo o arquivo
using (StreamReader sr = File.OpenText(strFile))
{
//Ler o conteúdo do txt e preencher o TextBox
txtRobots.Text = sr.ReadToEnd();
}
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
//Path do arquivo robots.txt
//C:\inetpub\wwwroot\nomedosite\robots.txt
string strFile = System.Web.HttpContext.Current.Server.MapPath("~/robots.txt");
//Escreve no robots.txt
File.WriteAllText(strFile, txtRobots.Text);
}
}
Download do exemplo aqui.