Si, webforms todavía, como dicen en muchos blog, el codigo legacy todavía esta allí y debemos mantenerlo
Recientemente tenia la necesidad de enviar desde el front un archivo de Excel a un webmethod y no encontraba la forma, intente con varias vias pero no tuve exito, hasta que letendo y juntando ideas de stackoverflow y otras fuente encontre que la forma de hacerlo
Basicamente debes hacer lo siguiente
En el front convertir tu archivo a base64
En el back recibirlo como string y luego convertirlo a base64
Front
async function LoadFile() {
console.log("Entro aqui")
var file = document.getElementById("file").files[0];
let formData = new Object();
formData.file = await ReadExcelToBase64(file);
fetch('WebMethodsTest.aspx/TestLoadFile', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(formData),
})
.then(result => console.log(result.json()))
}
function ReadExcelToBase64(inputFile) {
const temporaryFileReader = new FileReader();
return new Promise((resolve, reject) => {
temporaryFileReader.onerror = () => {
temporaryFileReader.abort();
reject(new DOMException("Problem parsing input file."));
};
temporaryFileReader.onload = () => {
resolve(temporaryFileReader.result.replace('data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,', ''));
};
temporaryFileReader.readAsDataURL(inputFile);
});
}
Back
Public Shared Function TestLoadFile(file As String) As String
Dim a As String
a = "Hola"
Dim fileBytes As Byte() = getArrayBytesFromStringFormatBase64(file)
Return a
End Function
Public Shared Function getArrayBytesFromStringFormatBase64(stringFileFormatBase64 As String) As Byte()
Dim bytes As Byte() = Convert.FromBase64String(stringFileFormatBase64)
Return bytes
End Function
Me ha parecido correcto tener este modelo de front con javascript y html y back con webmethods debido a que no tenemos mucho tiempo para reescribir la aplicación en otro lenguaje y con una arquitectura mas moderna, pero nos da un avance para cuando llegue el momento de hacer la migración; los webmethos simulan una api y dejar de usar los controles propios/clasicos de ASP.Net nos ayuda a usar los elementos nativos de html y hace mas facil una posible migración a un framework como react o angular